Spring使用hostname初始化bean

时间:2012-09-06 22:07:02

标签: spring initialization

我需要使用当前主机名填充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>

1 个答案:

答案 0 :(得分: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中创建一个名为myBean的bean,该bean由MyClass.myStaticMethod()的调用返回的对象填充。

但这只是中途,因为我们只有static方法的结果(在你的情况下是第一次调用)。

第3.3.2.3节详细说明了如何调用已经存在于ApplicationContext中的bean的非静态方法。它可以这样做:

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

这将在ApplicationContext中创建一个名为myOtherBean的bean,该名称由myBean.myNonStaticMethod()的调用返回的对象填充,其中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();
    }
}