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>

4

1 回答 1

10

这可以通过 xml 稍微简单地完成,详见Spring 文档的3.3.2.23.3.2.3部分。

总之,第 3.3.2.2 节建议了一种调用static类方法的方法。可以这样做:

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

这将在 中创建一个ApplicationContext名称为的 bean,该 beanmyBean由调用返回的对象填充MyClass.myStaticMethod()

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

3.3.2.3 节详细介绍了如何调用已经存在的 bean 的非静态方法ApplicationContext。可以这样做:

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

这将在 中创建一个ApplicationContext名称为的 bean,该 beanmyOtherBean由调用返回的对象填充myBean.myNonStaticMethod(),其中myBeanbean 是从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();
    }
}
于 2012-09-06T22:31:12.253 回答