2010-08-12 6 views

Respuesta

17

Con Spring 2.5 y superior, si un objeto requiere la invocación de un método de devolución de llamada en la inicialización, ese método se puede anotar con la anotación @PostConstruct.

Por ejemplo:

public class MyClass{ 

    @PostConstruct 
    public void myMethod() { 
    ... 
    } 
    ... 
} 

Esto es menos intrusivo que el enfoque BeanPostProcessor.

+0

Pero luego tengo que incluir a Spring en la ruta de compilación al construir mis pojos ... ¿no hay una forma de solo XML? –

+0

No importa, veo que @PostConstruct está en el paquete javax.annotation. ¡Gracias! –

2

Debe implementar la interfaz InitializingBean y anular el método afterPropertiesSet.

+0

Pero entonces tengo que incluir Primavera en la trayectoria de la estructura en la construcción de mis POJOs ... no hay forma de XML-solamente? –

+0

+1 Esto era exactamente lo que estaba buscando. – stacker

3

Por lo que puedo decir, the init-method is called after all dependencies are injected. Pruébelo:

public class TestSpringBean 
{ 
    public TestSpringBean(){ 
     System.out.println("Called constructor"); 
    } 

    public void setAnimal(String animal){ 
     System.out.println("Animal set to '" + animal + "'"); 
    } 

    public void setAnother(TestSpringBean another){ 
     System.out.println("Another set to " + another); 
    } 

    public void init(){ 
     System.out.println("Called init()"); 
    } 
} 

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="myBean" class="TestSpringBean" init-method="init"> 
     <property name="animal" value="hedgehog" /> 
     <property name="another" ref="depBean" /> 
    </bean> 

    <bean id="depBean" class="TestSpringBean"/> 

</beans> 

Esto produce:

Called constructor 
Called constructor 
Animal set to 'hedgehog' 
Another set to [email protected] 
Called init() 
Cuestiones relacionadas