2017-02-22 30 views
0

在我的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

回答

0

感謝您的澄清。 爲什麼不使用Java的反射來實現你的任務?如果需要進行運行的代碼是在構造函數中,你已經實現你的目標

Object instance = Class.forName("com.project.TargetClass").newInstance(); 

如果您知道完全合格的類名,你可以實例化一個像這樣的對象。

如果你需要,但是,要運行該實例的具體方法:

Method method = instance.getClass().getDeclaredMethod("methodName"); 
method.invoke(instance); 

希望這有助於!

+0

不要忘了大拇指的答案以及:)。謝謝 –

0

我會做這樣的事情一個Spring組件內:

@Component 
public class MyClass { 

    @Autowired 
    com.project.TimerBean timerBean; 

    public void myFunc() { 
     System.out.println(timerBean.getInterval()); 
    } 
    ... 
}