Esto se puede hacer un tanto simplemente con xml, como se detalla en sections 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 de invocación de un método static
de una clase. Esto se puede hacer como tan:
<bean id="myBean"
class="com.foo.MyClass"
factory-method="myStaticMethod"/>
Esto creará un grano en el ApplicationContext
con un nombre de myBean
, que está poblada por el objeto de regresar 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 está en el ApplicationContext
. Se puede hacer como tan:
<bean id="myOtherBean"
factory-bean="myBean"
factory-method="myNonStaticMethod"/>
Esto creará un grano en el ApplicationContext
con un nombre de myOtherBean
, que está poblada por el objeto de regresar de una invocación de myBean.myNonStaticMethod()
, donde myBean
es el bean promocionado de ApplicationContext
.
Cuando se unen, debe ser capaz de lograr lo que está buscando.
<bean id="localhostInetAddress"
class="java.net.InetAddress"
factory-method="getLocalHost"/>
<bean id="hostname"
factory-bean="localhostInetAddress"
factory-method="getHostName"/>
supuesto, la forma más fácil de hacerlo es con Java Configuration.
@Configuration
public class InetConfig {
@Bean
public String hostname() {
return InetAddress.getLocalHost().getHostName();
}
}
¿Tienes que configurar tu bean con xml, o puedes usar la configuración con anotaciones java? En el segundo caso, sería más fácil hacer lo que quieres. –