2010-06-06 17 views
6

¿Es correcto que pueda poner context:annotation-config en mi configuración XML y se inyectará automáticamente la clase de bean sin necesidad de anotaciones?¿Contexto: anotación-config una alternativa a @AutoWired?

Así que en lugar de utilizar estos tipos de anotaciones:

public class Mailman 
{ 
    private String name; 

    @Autowired 
    private Parcel Parcel; 

    public Mailman(String name) 
    { 
     this.name = name; 
    } 

    @Autowired 
    public void setParcel(Parcel Parcel) 
    { 
     this.Parcel = Parcel; 
    } 

    @Autowired 
    public void directionsToParcel(Parcel Parcel) 
    { 
     this.Parcel = Parcel; 
    } 

} 

que sólo tendría que escribir esto:

<beans ... > 
<bean id="mailMan" class="MailMan"> 
<constructor-arg value="John Doe"/> 
</bean> 
<bean id="parcel" class="Parcel" /> 
<context:annotation-config /> 
</beans> 

y luego mi clase MailMan sería mucho más simple, sin necesidad de anotaciones:

public class Mailman 
{ 
    private String name; 

    private Parcel Parcel; 

    public Mailman(String name) 
    { 
     this.name = name; 
    }  
} 

Respuesta

6

De forma predeterminada, un contexto Spring no presta atención a las anotaciones @Autowired. Para procesarlos, el contexto necesita tener un bean AutowiredAnnotationBeanPostProcessor registrado en el contexto.

<context:annotation-config/> registra uno de estos para usted (junto con algunos otros), por lo que lo necesita (a menos que se registre AutowiredAnnotationBeanPostProcessor, que es perfectamente válido).

Si no le gusta tener @Autowired en su código, puede inyectar explícitamente las propiedades en el XML usando <property>, que simplemente mueve el desorden de un lugar a otro.

Si su contexto es extremadamente simple, entonces puede usar el autoenlace implícito, como se describe here. Esencialmente, esto le dice a Spring que se autoajuste automáticamente por nombre o tipo de propiedad. Esto requirió muy poca configuración, pero se sale de control muy rápidamente: su naturaleza automática significa que es difícil de controlar y ofrece muy poca flexibilidad.

@Autowired realmente es la mejor opción, en general.

1

<context:annotation-config /> simplemente autoregistra todo el estándar bean post proc Los modelos proporcionados por Spring como PersistenceAnnotationBeanPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor y RequiredAnnotationBeanPostProcessor, para que no tenga que registrarlos individualmente en su archivo de contexto de primavera. Aún debe proporcionar las anotaciones @Autowired en los atributos/setter como anteriormente.

0

No.

@Autowired Anotaciones se necesitan en la clase junto con <context:annotation-config/>

La parte xml de configuración no es necesaria al utilizar las anotaciones.

También desde el doc Nota que <context:annotation-config/> sólo busca anotaciones sobre los granos en el mismo contexto de aplicación se define en. Esto significa que, si se pone en un WebApplicationContext para un DispatcherServlet, sólo los cheques para los granos en su @Autowired controladores, y no sus servicios.

Si no necesita utilizar anotaciones, debe especificar la configuración xml.