如何启用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运行一些代码,然后这个目的是在执行以后使用。这很难具体说明,主要是因为我把所有不同的豆都归入这个类别,而且他们每个人都做不同的事情。它们唯一共同的就是属性文件中的初始化。

+0

你的目标bean在哪里?你有没有在你的TimerBean中暴露吸气剂? – SMA

+0

我的猜测是TargetClass没有被声明为一个bean,我也相信你所说的“调用”目标类的意思是你正在调用该类中的一个静态方法。这是正确的吗? –

+0

澄清了这个问题,希望 - @AndreiBalici – ohseekay

感谢您的澄清。 为什么不使用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()); 
    } 
    ... 
}