2012-09-06 88 views
7

初始化豆我需要就像調用返回它來填充一個bean的屬性與當前的主機名: InetAddress.getLocalHost()的gethostname()春與主機名

它應該是像這樣:

<bean id="hostname" value="InetAddress.getLocalHost().getHostName()" />

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="schedulerName" ref="hostname" />

</bean>

+0

您是否必須使用xml配置您的bean,還是允許您使用java註釋進行配置?在第二種情況下,做你想做的事情會更容易。 –

回答

9

這可以通過xml簡單地完成,詳見Spring文檔的sections 3.3.2.23.3.2.3

總之,第3.3.2.2節提出了一種調用類的方法static的方法。這可以爲這樣做:

<bean id="myBean" 
    class="com.foo.MyClass" 
    factory-method="myStaticMethod"/> 

這將創建在ApplicationContext一個bean與myBean的名稱,它是由返回的對象從MyClass.myStaticMethod()的invokation填充。

但是,這只是一半,因爲我們只有static方法的結果(第一次調用你的情況)。

第3.3.2.3節詳細介紹瞭如何調用已存在於ApplicationContext中的bean的非靜態方法。它可以是這樣完成的:

<bean id="myOtherBean" 
    factory-bean="myBean" 
    factory-method="myNonStaticMethod"/> 

這將創建在ApplicationContext一個bean與myOtherBean的名稱,它是由返回的對象從myBean.myNonStaticMethod()的invokation,其中myBean是豆從ApplicationContext拉填充。

當放在一起時,你應該能夠實現你的目標。

<bean id="localhostInetAddress" 
    class="java.net.InetAddress" 
    factory-method="getLocalHost"/> 

<bean id="hostname" 
    factory-bean="localhostInetAddress" 
    factory-method="getHostName"/> 

當然,更簡單的方法是使用Java Configuration

@Configuration 
public class InetConfig { 
    @Bean 
    public String hostname() { 
     return InetAddress.getLocalHost().getHostName(); 
    } 
}