Является ли context: annotation-config альтернативой @AutoWired? - PullRequest
6 голосов
/ 06 июня 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 06 июня 2010

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

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

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

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

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

1 голос
/ 06 июня 2010

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

0 голосов
/ 06 июня 2010

Нет.

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

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

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

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

...