2012-09-06 50 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(); 
    } 
}