2015-05-12 2 views
4

Согласно @Autowired Javadoc:Spring @Autowired для инкубационных методов против методов, не инкубационные

Отмечает конструктор, поле, сеттер метод или метод конфигурации, как будет autowired путем инъекций зависимостей объектов Спринга. Только один конструктор (в max) любого данного класса bean-класса может нести эту аннотацию, указывая на конструктор для автоустройства при использовании в качестве Spring-компонента. Такой конструктор не должен быть общедоступным. Поля вводятся сразу после построения компонента, прежде чем вызывать любые методы конфигурации. Такое поле конфигурации не должно быть общедоступным. Способы Config могут иметь произвольное имя и любое количество аргументов; каждый из этих аргументов будет автообновлен с соответствующим компонентом в контейнере Spring.

Bean методы свойство инкубационных эффективно лишь частный случай такого метод общего конфигурационного. Такие методы конфигурации не обязательно должны быть общедоступными. В случае нескольких методов аргументов параметр 'required' равен , применимому для всех аргументов. В случае типа зависимости Collection или Map контейнер будет автоувеличивать все бобы, соответствующие объявленному типу значений . В случае карты ключи должны быть объявлены как типа String и будут разрешены к соответствующим именам компонентов. Примечание , что фактическая инъекция выполняется через BeanPostProcessor, который , в свою очередь, означает, что вы не можете использовать @Autowired для инъекций ссылок в типы BeanPostProcessor или BeanFactoryPostProcessor. Обратитесь к javadoc для класса AutwiredAnnotationBeanPostProcessor (который, по умолчанию, , проверяет наличие этой аннотации).

Мой вопрос в том, что подразумевается под конфигурационными методами? А также, допустим, у меня есть метод setter с @Autowired аннотацией и некоторым произвольным методом с @Autowired аннотацией. Я предполагаю, что метод setter вызывается весной автоматически после создания экземпляра bean, тогда как метод randomAutowred с произвольным именем не будет вызван, правильно? Также как весна понимает, что определенный метод @Autowired следует вызывать после создания экземпляра (seters), в то время как другие не должны? И как это соотносится с заявлением от Javadoc, говоря, что

Bean методы свойство инкубационных эффективно лишь частный случай такой общий метод конфигурации

, где я могу прочитать об этом, весна документация не содержит никакой информации об этом, а также я не смог найти точную логику, используемую весной в ее javadocs.

ответ

0

Способ конфигурации является завод-подобный метод, который в этом случае будет получить PARAMATERS autowired:

@Autowired 
public SomeObject initSomeObject(Object1 o1, Object2 o2, ...) { 

@Autowired просто гарантирует, что весна будет (попытка) обеспечить необходимые параметры.

3

@Autowired аннотация может использоваться с конструктором, методом сеттера или любым другим способом. Всякий раз, когда Spring находит @Autowired аннотации, он попытается найти компоненты, соответствующие параметрам метода, и вызовет этот метод.Если несколько методов (setter или non-setter) имеют аннотацию @Autowired, все будут вызываться Spring после создания экземпляра bean.

+1

Правильно ли я понимаю, что всякий раз, когда весна воспринимает метод «autowired», он должен вызывать этот метод после создания экземпляра компонента. Всякий раз, когда весна видит «autwired» на поле, требуется инициализировать это свойство соответствующим компонентом. Всякий раз, когда он видит «autwired» на конструкторах, он обязан вызывать хотя бы один из этих конструкторов. Таким образом, в основном в моей инструкции Initial, я ошибаюсь, что методы non-setter, аннотированные с помощью «autwired», не должны вызываться после создания экземпляра bean-компонента. – dhblah

+0

Вы попадаете в глаз быков! – xyz

+0

[dhblah] (https://stackoverflow.com/users/260894/dhblah) вы не совсем прав о конструкторе. Только один конструктор может иметь @Autowired аннотацию. Он указан в javadoc, который вы приложили. –

0

Config-метод в данном контексте относится к методам, которые вы укажете при init-method или @PostConstruct

сеттера, как вы уже знаете, как setXXX

Так, очевидно, нет никаких трудностей в нахождении, что есть что. В то же время обратите внимание на то, что пружина не может автоопределить на основе имен параметров.

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