intellij - Spring initialize bean con nombre de host
spring io (1)
Esto se puede hacer un tanto simplemente con xml, como se detalla en las secciones 3.3.2.2 y 3.3.2.3 de la documentación de Spring.
En resumen, la sección 3.3.2.2 sugiere un método para invocar un método static
de una clase. Esto se puede hacer así:
<bean id="myBean"
class="com.foo.MyClass"
factory-method="myStaticMethod"/>
Esto creará un bean en ApplicationContext
con un nombre de myBean
, que se rellena con el objeto devuelto de una invocación de MyClass.myStaticMethod()
.
Pero esto solo está a mitad de camino, ya que solo tenemos el resultado del método static
(la primera llamada en su caso).
La Sección 3.3.2.3 detalla cómo invocar un método no estático de un bean que ya se encuentra en el ApplicationContext
. Se puede hacer así:
<bean id="myOtherBean"
factory-bean="myBean"
factory-method="myNonStaticMethod"/>
Esto creará un bean en ApplicationContext
con un nombre de myOtherBean
, que se rellena con el objeto devuelto de una invocación de myBean.myNonStaticMethod()
, donde myBean
es el bean extraído de ApplicationContext
.
Cuando se combinan, debe ser capaz de lograr lo que busca.
<bean id="localhostInetAddress"
class="java.net.InetAddress"
factory-method="getLocalHost"/>
<bean id="hostname"
factory-bean="localhostInetAddress"
factory-method="getHostName"/>
Por supuesto, la forma más fácil de hacerlo es con la Configuración de Java .
@Configuration
public class InetConfig {
@Bean
public String hostname() {
return InetAddress.getLocalHost().getHostName();
}
}
Necesito completar una propiedad de un bean con el nombre de host actual tal como lo devuelve la llamada: InetAddress.getLocalHost (). GetHostName ()
Debería ser algo así:
<bean id="hostname" value="InetAddress.getLocalHost().getHostName()" />
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="schedulerName" ref="hostname" />
</bean>