2010-06-06 1 views
6

Верно ли, что я могу положить context:annotation-config в свой XML-конфигуратор, и он будет автоматически вводить класс bean без каких-либо аннотаций?Контекст: annotation-config альтернатива @AutoWired?

Таким образом, вместо того, чтобы использовать эти типы аннотаций:

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; 
    } 

} 

мне просто нужно было бы написать так:

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

, а затем мой класс MailMan будет выглядеть намного проще, без необходимости в аннотации:

public class Mailman 
{ 
    private String name; 

    private Parcel Parcel; 

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

ответ

6

По умолчанию контекст Spring не обращает внимания на аннотации @Autowired. Чтобы обработать их, контекст должен иметь в своем распоряжении фасоль AutowiredAnnotationBeanPostProcessor.

<context:annotation-config/> регистрирует один из них для вас (наряду с несколькими другими), поэтому вам это нужно (если вы не зарегистрируете AutowiredAnnotationBeanPostProcessor самостоятельно, что совершенно верно).

Если вам не нравится иметь @Autowired в вашем коде, вы можете явно вводить свойства в XML, используя <property>, который просто перемещает беспорядок из одного места в другое.

Если ваш контекст чрезвычайно простой, то вы можете использовать неявное автоподключение, как описано here. По сути, это говорит Spring автоматически автоудалить по имени или типу свойства. Это требовало очень маленькой конфигурации, но оно очень быстро выходит из-под контроля - это автоматическая природа означает, что это трудно контролировать, и дает вам очень мало гибкости.

@Autowired действительно лучший вариант, в общем.

1

<context:annotation-config /> просто автоматически регистрирует все стандартные компоненты bean post proc essors, предоставленные Spring, например PersistenceAnnotationBeanPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor и RequiredAnnotationBeanPostProcessor, так что вам не нужно регистрировать их отдельно в вашем файле контекстного весны. Вы все равно должны предоставить аннотации @Autowired об атрибутах/установщике, как ранее.

0

No.

@Autowired Аннотации необходимы в классе вместе с <context:annotation-config/>

XML-конфигурации часть не требуется при использовании аннотаций.

Кроме того, из дока Обратите внимание, что <context:annotation-config/> выглядит только для аннотаций на бобах в том же контексте приложения она определена. Это означает, что, если вы положили в WebApplicationContext для DispatcherServlet, это только для проверки @Autowired бобов в вашем контроллеры, а не ваши услуги.

Если вам не нужно использовать аннотации, вам необходимо указать конфигурацию xml.

Смежные вопросы