如何使 Java 对象访问 Spring 属性 值?
How to enable Java object to access Spring property value?
在我的一个 Spring xml 属性 文件中,我有以下 bean:
<bean class="com.project.TimerBean">
<property name="delay" value="30000" />
<property name="interval" value="60000" />
<property name="invokeThis" value="com.project.TargetClass" />
<property name="receiver" value="XYZ" />
</bean>
本质上,TimerBean
用于调用指定值内的TargetClass
。此 属性 文件中声明了 TimerBean
的其他几个实例。
现在我需要 TargetClass
来访问 interval
的值。最好的方法是什么?
编辑 #1:为了澄清我的情况,TimerBean
本质上创建了一个 TargetClass
类型的对象,TargetClass
中的一些代码运行,然后在稍后的执行中使用该对象.很难具体说明,主要是因为我将所有不同的 bean 归为这个 TargetClass
类别,并且每个 bean 做不同的事情。它们唯一的共同点是 属性 文件中的初始化。
我会在 Spring 组件中做这样的事情:
@Component
public class MyClass {
@Autowired
com.project.TimerBean timerBean;
public void myFunc() {
System.out.println(timerBean.getInterval());
}
...
}
感谢您的澄清。
你为什么不使用 Java 的反射来完成你的任务?
如果您知道完全限定的 class 名称,您可以像这样实例化一个对象:
Object instance = Class.forName("com.project.TargetClass").newInstance();
如果需要运行的代码在构造函数中,你就达到了目的。
但是,如果您需要 运行 该实例的特定方法:
Method method = instance.getClass().getDeclaredMethod("methodName");
method.invoke(instance);
希望对您有所帮助!
在我的一个 Spring xml 属性 文件中,我有以下 bean:
<bean class="com.project.TimerBean">
<property name="delay" value="30000" />
<property name="interval" value="60000" />
<property name="invokeThis" value="com.project.TargetClass" />
<property name="receiver" value="XYZ" />
</bean>
本质上,TimerBean
用于调用指定值内的TargetClass
。此 属性 文件中声明了 TimerBean
的其他几个实例。
现在我需要 TargetClass
来访问 interval
的值。最好的方法是什么?
编辑 #1:为了澄清我的情况,TimerBean
本质上创建了一个 TargetClass
类型的对象,TargetClass
中的一些代码运行,然后在稍后的执行中使用该对象.很难具体说明,主要是因为我将所有不同的 bean 归为这个 TargetClass
类别,并且每个 bean 做不同的事情。它们唯一的共同点是 属性 文件中的初始化。
我会在 Spring 组件中做这样的事情:
@Component
public class MyClass {
@Autowired
com.project.TimerBean timerBean;
public void myFunc() {
System.out.println(timerBean.getInterval());
}
...
}
感谢您的澄清。 你为什么不使用 Java 的反射来完成你的任务?
如果您知道完全限定的 class 名称,您可以像这样实例化一个对象:
Object instance = Class.forName("com.project.TargetClass").newInstance();
如果需要运行的代码在构造函数中,你就达到了目的。
但是,如果您需要 运行 该实例的特定方法:
Method method = instance.getClass().getDeclaredMethod("methodName");
method.invoke(instance);
希望对您有所帮助!