我需要使用当前主机名填充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 :(得分:9)
这可以通过xml简单地完成,详见Spring文档的sections 3.3.2.2和3.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();
}
}