@[toc]
1. Примечания к аннотации @Import
1,@Import может быть использован только на классе, @Import добавляет экземпляры в контейнер IOC spring с помощью быстрого импорта
2. Есть много способов присоединиться к контейнеру IOC, и аннотация @Import относительно проста.Аннотацию @Import можно использовать для импорта сторонних пакетов., конечно можно и аннотацию @Bean, но способ быстрого импорта аннотации @Import удобнее
3. Существует три варианта использования аннотации @Import.
2. Три варианта использования @Import
Три варианта использования @Import в основном включают:
1. Непосредственно заполните метод массива класса 2. Метод ImportSelector [Ключевые моменты] 3. Метод ImportBeanDefinitionRegistrar
2.1, первое использование: прямое заполнение массива классов
Заполните соответствующий массив классов напрямую, массив классов может иметь 0 или более.
Синтаксис следующий:
@Import({ 类名.class , 类名.class... })
public class TestDemo {
}
Соответствующие импортированные bean-компоненты будут добавлены в контейнер Spring, и эти имена bean-компонентов в контейнере относятся к этому классу.полное имя класса, например com.yc.имя класса
2.2. Второе использование: метод ImportSelector [Ключевые моменты]
Предпосылка этого метода заключается в том, что класс должен реализовать интерфейс ImportSelector.Если я хочу использовать этот метод, целевым объектом является класс Myclass.Анализ выглядит следующим образом:
Создайте класс Myclass и реализуйте интерфейс ImportSelector
public class Myclass implements ImportSelector {
//既然是接口肯定要实现这个接口的方法
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[0];
}
}
Проанализируйте метод selectImports, реализующий интерфейс:
- 1. Возвращаемое значение: это полное имя класса компонента, который мы действительно хотим импортировать в контейнер [фокус】
- 2. Параметры: AnnotationMetadata представляет всю информацию об аннотациях, которая в настоящее время аннотируется аннотациями @Import [не суть]
Следует отметить, что метод selectImports может возвращать пустой массив, но не может возвращать null, иначе будет сообщено об исключении нулевого указателя!
После того, как приведенный выше анализ завершен, конкретные шаги использования будут следующими:
Шаг 1. Создайте класс Myclass и реализуйте интерфейс ImportSelector. Для демонстрации добавьте полное имя класса к возвращаемому значению.
public class Myclass implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.yc.Test.TestDemo3"};
}
}
Шаг 2. Напишите класс TestDemo и отметьте класс Myclass с помощью метода ImportSelector.
@Import({TestDemo2.class,Myclass.class})
public class TestDemo {
@Bean
public AccountDao2 accountDao2(){
return new AccountDao2();
}
}
Видно, что Ичунь сознательно выбрал аннотацию @Bean роли дракона, если аннотация @Bean не очень понятна для детской обуви, вы можете обратиться кОбъясните аннотацию Spring @bean на местном языке
Шаг 3: Напишите тестовый класс компонента в контейнере печати
/**
* 打印容器中的组件测试
*/
public class AnnotationTestDemo {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(TestDemo.class); //这里的参数代表要做操作的类
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String name : beanDefinitionNames){
System.out.println(name);
}
}
}
Шаг 4: Запуск результатов
2.3, третье использование: метод ImportBeanDefinitionRegistrar
Это также интерфейс, аналогичный второму использованию ImportSelector, с подобием 80%, но это использование более настраиваемое, как показано ниже:
Шаг 1. Создайте класс Myclass2 и реализуйте интерфейс ImportBeanDefinitionRegistrar.
public class Myclass2 implements ImportBeanDefinitionRegistrar {
//该实现方法默认为空
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
}
}
Параметрический анализ:
- Первый аргумент: annotationMetadata и параметры такие же, как и раньше. Информация ImportSelector указывает, что все заметки, которые в настоящее время @Import to comment отмечены
- Второй параметр указывает, что bean-компонент определен для регистрации.
Шаг 2: Напишите код для настройки зарегистрированных bean-компонентов
public class Myclass2 implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//指定bean定义信息(包括bean的类型、作用域...)
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestDemo4.class);
//注册一个bean指定bean名字(id)
beanDefinitionRegistry.registerBeanDefinition("TestDemo4444",rootBeanDefinition);
}
}
Шаг 3: Напишите класс TestDemo и пометьте класс Myclass2 с помощью метода ImportBeanDefinitionRegistrar.
@Import({TestDemo2.class,Myclass.class,Myclass2.class})
public class TestDemo {
@Bean
public AccountDao2 accountDao222(){
return new AccountDao2();
}
}
Шаг 4: Запуск результатов
3. Обзор трех способов использования аннотации @Import
Первое использование:
@Import
({Компоненты сосуда, которые должны быть импортированы}): контейнер автоматически регистрирует компонент,ID по умолчанию на полное имя класса
Второе использование:
ImportSelector
[фокус】
Третье использование:
ImportBeanDefinitionRegistrar
: Вручную регистрировать контейнер для бобов
Вышеупомянутые три метода использования можно смешивать и использовать в одном @Import, обратите особое внимание на то, чтобы первый и второй методы были зарегистрированы как полные имена классов, а третий метод можно настроить.
Сама аннотация @Import часто используется в Springboot, особенно метод ImportSelector второго использования часто используется в Springboot, особенно для мастеринга!
Если эта статья хоть немного вам поможет, то ставьте лайк, спасибо~
Наконец, если есть какие-либо недостатки или неточности, добро пожаловать на исправления и критику, большое спасибо! Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение и ответьте как можно скорее!
Приглашаю всех обратить внимание на мою официальную учетную запись, там есть некоторые учебные материалы по Java и большая волна электронных книг по Java, таких как всесторонняя виртуальная машина Java г-на Чжоу Чжимина, идеи программирования Java, объемы основных технологий, большой разговор о дизайне. паттерны, борьба с параллельным программированием на Java... .. Это все библия Java, не говоря уже о том, чтобы садиться в машину Tomcat, поехали! Самое главное - вместе обсуждать технологии, тосковать по технологиям, заниматься технологиями, и когда это согласовано, это друг горшка ...