如何启用Java对象来访问Spring属性值?
问题描述:
在我的Spring XML属性文件之一,我有以下豆:如何启用Java对象来访问Spring属性值?
<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
的值。做这个的最好方式是什么?
EDIT#1:澄清我的情况,TimerBean
实质上创建TargetClass
类型的对象,内部TargetClass
运行一些代码,然后这个目的是在执行以后使用。这很难具体说明,主要是因为我把所有不同的豆都归入这个类别,而且他们每个人都做不同的事情。它们唯一共同的就是属性文件中的初始化。
答
感谢您的澄清。 为什么不使用Java的反射来实现你的任务?如果需要进行运行的代码是在构造函数中,你已经实现你的目标
Object instance = Class.forName("com.project.TargetClass").newInstance();
:
如果您知道完全合格的类名,你可以实例化一个像这样的对象。
如果你需要,但是,要运行该实例的具体方法:
Method method = instance.getClass().getDeclaredMethod("methodName");
method.invoke(instance);
希望这有助于!
+0
不要忘了大拇指的答案以及:)。谢谢 –
答
我会做这样的事情一个Spring组件内:
@Component
public class MyClass {
@Autowired
com.project.TimerBean timerBean;
public void myFunc() {
System.out.println(timerBean.getInterval());
}
...
}
你的目标bean在哪里?你有没有在你的TimerBean中暴露吸气剂? – SMA
我的猜测是TargetClass没有被声明为一个bean,我也相信你所说的“调用”目标类的意思是你正在调用该类中的一个静态方法。这是正确的吗? –
澄清了这个问题,希望 - @AndreiBalici – ohseekay