Действительно ли context:annotation-конфигурация является альтернативой @AutoWired?

Это корректно, который я могу поместить context:annotation-config в моей конфигурации XML и это автоматически введет класс компонента, не нуждаясь ни в каких аннотациях?

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

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
задан Antacid 6 June 2010 в 17:02
поделиться

3 ответа

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

регистрирует один из них для вас (вместе с несколькими другими), поэтому он вам действительно нужен (если вы сами не зарегистрируете AutowiredAnnotationBeanPostProcessor , что совершенно верно ).

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

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

@Autowired в целом лучший вариант.

6
ответ дан 17 December 2019 в 00:03
поделиться

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

1
ответ дан 17 December 2019 в 00:03
поделиться

Нет.

@Autowired Аннотации необходимы на классе вместе с

Часть xml config не нужна при использовании аннотаций.

Также из документа Обратите внимание, что ищет аннотации только для бобов в том же контексте приложения, в котором они определены. Это означает, что если вы зададите WebApplicationContext для DispatcherServlet, он проверит наличие @Autowired бобов только в ваших контроллерах, но не в ваших сервисах.

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

0
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: