Использование аннотаций в Spring для автоподключения компонентов | Spring Series (5)

задняя часть
Использование аннотаций в Spring для автоподключения компонентов | Spring Series (5)

Это 15-й день моего участия в Gengwen Challenge.Подробности о мероприятии, пожалуйста, проверьте:Обновить вызов


Статьи по Теме

Весенняя серия:Весенняя серия


Автопроводка с использованием аннотаций

  • В прошлой статье мы объяснили несколько способов автоматической сборки Spring.На самом деле, в реальной разработке мы используем аннотации для реализации сборки.
1. @Autowired

① Прежде всего, вот что: старайтесь не использовать заголовочный файл bean-компонентов, автоматически созданный idea для импорта, его необходимо заполнить, иначе будет сообщено об ошибке:在这里插入图片描述② Дополнительный заголовок вводного файла:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">

③xml: включить поддержку аннотаций атрибутов

	<!--开启属性注解支持-->
    <context:annotation-config/>

    <bean id="car" class="entity.Car"/>
    <bean id="house" class="entity.House"/>
    <bean id="person" class="entity.Person"/>

④Класс объекта:

public class Person {
    @Autowired
    private Car car;
    @Autowired
    private House house;

    private String name;
    private int age;
    private String like;

    public Car getCar() {
        return car;
    }

    public House getHouse() {
        return house;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getLike() {
        return like;
    }
}
public class Car {
    public void getName(){
        System.out.println("我是一辆车!");
    }
}
public class House {
    public void getName(){
        System.out.println("我是一栋房子!");
    }
}

⑤Тестовый класс:

public class TestAnonatation {
    public static void main(String[] args) {
        ApplicationContext Context = new ClassPathXmlApplicationContext("ContextAplication.xml");
        Person person = Context.getBean("person",Person.class);

        person.getCar().getName();
        person.getHouse().getName();
    }
}

⑥Результат выполнения:在这里插入图片描述⑦Обзор:

  • После использования @Autowired метод set в классе Person можно опустить, что упрощает объем кода.
  • @Autowired(required = false) Значение по умолчанию — true, объект не может быть нулевым, false означает, что объект может быть нулевым
  • @Autowired фактически эквивалентен автоматической сборке byType, которая автоматически собирается в соответствии с типом
2. @Квалификатор
  • @Qualifier — это комбинированная аннотация, которую нельзя использовать отдельно.
  • Используйте @Autowired для указания сборки byName()
	@Autowired
    @Qualifier(value = "car")
    private Car car;
    @Autowired
    @Qualifier(value = "house")
    private House house;
  • Обратите внимание на это, вы можете напрямую указать указанное местоположение xml!

在这里插入图片描述

  • Результаты:

在这里插入图片描述

3. @Ресурс

①xml:

	@Resource(name = "car")
    private Car car;
    @Resource
    private House house;

②Результат выполнения:在这里插入图片描述

③Резюме:

  • При указании имени предпочтение отдается byName, при этом id в xml не может быть пустым!
  • Если он не указан, по умолчанию преобладает byName, в случае неудачи превалирует byType!
  • Все провал!
4. Сходства и различия между @Autowired и @Resource

Сходства и различия между @Autowired и @Resource:

  • И @Autowired, и @Resource могут использоваться для связывания bean-компонентов. Может быть написано в поле или написано в методе установки.

  • @Autowired по умолчанию собирается по типу (принадлежит спецификации spring).По умолчанию должен существовать зависимый объект.Если вы хотите разрешить нулевые значения, вы можете установить для его обязательного свойства значение false, например: @Autowired(required= false), если мы хотим, чтобы сборка с использованием имени могла использоваться в сочетании с аннотацией @Qualifier

  • @Resource (принадлежит возврату J2EE), по умолчанию собирается по имени, а имя можно указать через атрибут name. Если атрибут имени не указан, то при написании аннотации к полю имя поля используется для поиска по имени по умолчанию.Если аннотация написана по методу установки, имя атрибута используется для сборки по умолчанию. Собрать по типу, когда не найдено ни одного компонента, соответствующего имени. Но следует отметить, что если указан атрибут name, то он будет собран только по имени.

  • У них одинаковая функция и они внедряются в объект по аннотации, но порядок выполнения разный. Сначала @Autowired по типу, сначала @Resource по имени


Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~

Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах