Spring Auto-Wiring Beans с аннотацией @Autowired

Spring Auto-Wiring Beans с аннотацией @Autowired

В последнем примереSpring auto-wiring in XML он автоматически подключит свойство matched любого bean-компонента в текущем контейнере Spring. В большинстве случаев вам может понадобиться свойство autowired только для определенного компонента.

В Spring вы можете использовать аннотацию@Autowired для автоматического подключения bean-компонента к методу установки, конструктору или полю. Более того, он может автоматически связывать свойства в определенном бобе.

Note
Аннотация @Autowired автоматически подключает компонент путем сопоставления типа данных.

См. Полный пример ниже, чтобы продемонстрировать использование@Autowired.

1. Фасоль

Клиентский компонент, объявленный в файле конфигурации компонента. Позже вы будете использовать «@Autowired» для автоматического подключения bean-компонента person.

package com.example.common;

public class Customer
{
    //you want autowired this field.
    private Person person;

    private int type;
    private String action;

    //getter and setter method

}


    
        
        
    

    
        
        
        
    

2. Регистрация AutowiredAnnotationBeanPostProcessor

Чтобы включить@Autowired, вы должны зарегистрировать «AutowiredAnnotationBeanPostProcessor», и вы можете сделать это двумя способами:

1. Включить

Добавьте контекст Spring и в файл конфигурации компонента.


    //...

    
    //...

Полный пример,



    

    
        
        
    

    
        
        
        
    

2. Включить AutowiredAnnotationBeanPostProcessor

Включите «AutowiredAnnotationBeanPostProcessor» непосредственно в файл конфигурации компонента.





    
        
        
    

    
        
        
        
    

3. @Autowired Примеры

Теперь вы можете автоматически подключить bean-компонент через@Autowired, и его можно применить к методу установки, конструктору или полю.

1. @ Автоматический метод установки
package com.example.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer
{
    private Person person;
    private int type;
    private String action;
    //getter and setter methods

    @Autowired
    public void setPerson(Person person) {
        this.person = person;
    }
}
2. @Autowired construtor
package com.example.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer
{
    private Person person;
    private int type;
    private String action;
    //getter and setter methods

    @Autowired
    public Customer(Person person) {
        this.person = person;
    }
}
3. @Autowired field
package com.example.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer
{
    @Autowired
    private Person person;
    private int type;
    private String action;
    //getter and setter methods
}

Приведенный выше пример автоматически связывает «PersonBean» с личным свойством Клиента.

Запустить его

package com.example.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App
{
    public static void main( String[] args )
    {
        ApplicationContext context =
          new ClassPathXmlApplicationContext(new String[] {"SpringBeans.xml"});

        Customer cust = (Customer)context.getBean("CustomerBean");
        System.out.println(cust);

    }
}

Выход

Customer [action=buy, type=1,
person=Person [address=address 123, age=28, name=example]]

Проверка зависимостей

По умолчанию @Autowired выполнит проверку зависимостей, чтобы убедиться, что свойство правильно подключено. Когда Spring не может найти соответствующий bean-компонент для соединения, он выдаст исключение. Чтобы исправить это, вы можете отключить эту функцию проверки, установив для атрибута «required» @Autowired значение false.

package com.example.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer
{
    @Autowired(required=false)
    private Person person;
    private int type;
    private String action;
    //getter and setter methods
}

В приведенном выше примере, если Spring не может найти соответствующий компонент, он оставит свойство person неустановленным.

@Qualifier

Аннотация @Qualifier, которую мы использовали, управляла тем, какой bean-компонент должен быть автоматически подключен к полю. Например, файл конфигурации bean-компонента с двумя похожими bean-компонентами.



    

    
        
        
    

    
        
        
        
    

    
        
        
        
    

Будет ли Spring знать, какой боб должен быть подключен?

Чтобы исправить это, вы можете использовать@Qualifier для автоматического подключения определенного bean-компонента, например,

package com.example.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class Customer
{
    @Autowired
    @Qualifier("PersonBean1")
    private Person person;
    private int type;
    private String action;
    //getter and setter methods
}

Это означает, что bean-компонент «PersonBean1» автоматически подключается в личную собственность Клиента. Прочтите этот полный пример -Spring Autowiring @Qualifier example

Заключение

Эта аннотация@Autowired очень гибкая и мощная, и определенно лучше, чем атрибут «autowire» в файле конфигурации bean-компонента.

Скачать исходный код

Скачать -Spring-Autowired-Annotation-Example.zip (6 КБ)