2012-09-06 6 views
7

мне нужно заполнить свойство бина с текущим именем хоста так же, как вызов возвращает его.: InetAddress.getLocalHost() getHostName()Spring инициализировать компонент с именем хоста

Это должно быть что-то вроде этого:

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

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

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

</bean>

+0

Нужно настроить фасоль с помощью xml или вы можете использовать конфигурацию с аннотациями java? Во втором случае было бы легче делать то, что вы хотите. –

ответ

9

Это можно сделать несколько просто с помощью xml, как указано в 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, который населен возвращенного объекта от invokation из MyClass.myStaticMethod().

Но это только на полпути, так как у нас есть только результат метода static (первый звонок в вашем случае).

В разделе 3.3.2.3 подробно описаны способы вызова нестатического метода компонента, который уже находится в ApplicationContext. Это может быть сделано как так:

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

Это создаст компонент в ApplicationContext с именем myOtherBean, который населен возвращенным объектом из invokation из 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(); 
    } 
} 
Смежные вопросы