세 가지 다른 방법은 세 가지 방법으로 사용하는 노트의 스프링 스프링 @Import 주석의 노트 주석 @import

발췌 : https://www.cnblogs.com/yichunguo/p/12122598.html

세 가지 방법으로 사용되는 스프링의 @Import 주석 노트

 

@

1, @ 가져 오기 노트 노트

. 1, @Import는 클래스를  가져 오기 @ 봄 IOC 용기의 빠른 도입의 예에 의해 달성이 추가되었습니다

 

 

2, 여러 가지 가져 오기가 상대적으로 매우 가죽 노트 @있는 IOC 컨테이너에 가입, @Import 주석 타사 패키지를 가져올 수 있습니다  물론 @Bean 주석이 될 수있다,하지만 방법 @Import 노트 빠르게 더 편리 가져

 


3, 가져 오기 노트 @ 세 가지 사용법이 있습니다

 

2 오기 @ 세 사용

세 가지 용도는 다음과 @import :

1 클래스의 배열을 작성하는 직접적인 방법
2, 방법 ImportSelector [FOCUS]
3 ImportBeanDefinitionRegistrar 방법

2.1 제 사용량 : 직접적인 클래스의 배열을 채우기

직접 충전 배열 대응 클래스, 클래스 0 어레이의 복수를 가질 수있다.

구문은 다음과 같습니다 :

@Import({ 类名.class , 类名.class... })
public class TestDemo {

}

해당 가져 오기 스프링 빈 컨테이너에 추가 할 수 있으며, 컨테이너에서 빈 클래스 이름에 전체 클래스 이름  , 클래스 이름 등 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"}; } }

단계 : 쓰기 TestDemo 클래스 및 ImportSelector MyClass에 클래스를 사용하는 방법을 표시

@Import({TestDemo2.class,Myclass.class})
public class TestDemo {
        @Bean
        public AccountDao2 accountDao2(){
            return new AccountDao2(); } }

볼 수 있듯이 노트를 참조 할 수 있습니다 @Bean 신발 매우 명확하지 않은 경우, 이춘은 의도적으로, 카메오 역할 @Bean 노트를 집어 @Bean 주석의 봄을 설명하기 위해 특유의

세번째 단계는 컴포넌트 클래스 용기 인쇄 시험의 제조

/**
 * 打印容器中的组件测试
 */
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); } } }

실행 결과 : 네 단계
그림 삽입 설명 여기

2.3 세 번째 사용 : ImportBeanDefinitionRegistrar 방법

또한 두 번째 ImportSelector 사용, 80 %의 유사성에 대한 인터페이스와 유사하지만, 다음과 같이 사용이 상대적으로 사용자 등록입니다 :

1 단계 : MyClass2의 클래스를 만들고 인터페이스를 구현 ImportBeanDefinitionRegistrar

public class Myclass2 implements ImportBeanDefinitionRegistrar { //该实现方法默认为空 @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { } }

파라 메트릭 분석 :

  • 첫 번째 인수 : annotationMetadata 및 매개 변수가 ImportSelector 정보 이전과 동일합니다 모든 노트는 현재 @Import 주석에 표시된 것을 나타냅니다
  • 두 번째 매개 변수는 레지스터가 빈을 정의 표시

단계 : 코드를 작성, 사용자 정의 등록 콩

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); } }

단계 세 가지가 : 쓰기 TestDemo 클래스 및 사용 ImportBeanDefinitionRegistrar 방법 MyClass2의 클래스에 표시

@Import({TestDemo2.class,Myclass.class,Myclass2.class})
public class TestDemo {

        @Bean
        public AccountDao2 accountDao222(){
            return new AccountDao2(); } }

실행 결과 : 네 단계
그림 삽입 설명 여기

가져 오기 주석 요약 @ 3, 세 가지 방법

의 첫 번째 사용 : @Import(컨테이너가 {구성 요소를} 가져올 수) : 구성 요소 컨테이너가 자동으로 등록되고, ID는 기본의 정규화 된 클래스 이름입니다

 

第二种用法:ImportSelector:返回需要导入的组件的全类名数组,springboot底层用的特别多【重点 

 

 

 

第三种用法:ImportBeanDefinitionRegistrar:手动注册bean到容器

以上三种用法方式皆可混合在一个@Import中使用,特别注意第一种和第二种都是以全类名的方式注册,而第三中可自定义方式。

@Import注解本身在springboot中用的很多,特别是其中的第二种用法ImportSelector方式在springboot中使用的特别多,尤其要掌握!

如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

그림 삽입 설명 여기

不曾飞舞的每一天都是对生命的一种辜负....
 
分类:  Spring学习专栏

@

1、@Import注解须知

1、@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中

 

 

2、加入IOC容器的方式有很多种,@Import注解就相对很牛皮了,@Import注解可以用于导入第三方包 ,当然@Bean注解也可以,但是@Import注解快速导入的方式更加便捷

 


3、@Import注解有三种用法

 

2、@Import的三种用法

@Import的三种用法主要包括:

1、直接填class数组方式
2、ImportSelector方式【重点】
3、ImportBeanDefinitionRegistrar方式

2.1、第一种用法:直接填class数组

直接填对应的class数组,class数组可以有0到多个。

语法如下:

@Import({ 类名.class , 类名.class... })
public class TestDemo {

}

对应的import的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,否则会报空指针异常!

以上分析完毕之后,具体用法步骤如下:

第一步:创建Myclass类并实现ImportSelector接口,这里用于演示就添加一个全类名给其返回值

public class Myclass implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { return new String[]{"com.yc.Test.TestDemo3"}; } }

第二步:编写TestDemo 类,并标注上使用ImportSelector方式的Myclass类

@Import({TestDemo2.class,Myclass.class})
public class TestDemo {
        @Bean
        public AccountDao2 accountDao2(){
            return new AccountDao2(); } }

可以看出,宜春故意挑了个龙套角色@Bean注解,若对@Bean注解不是很清晰的童鞋可以参考大白话讲解Spring的@bean注解

第三步:编写打印容器中的组件测试类

/**
 * 打印容器中的组件测试
 */
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); } } }

第四步:运行结果
그림 삽입 설명 여기

2.3、第三种用法:ImportBeanDefinitionRegistrar方式

同样是一个接口,类似于第二种ImportSelector用法,相似度80%,只不过这种用法比较自定义化注册,具体如下:

第一步:创建Myclass2类并实现ImportBeanDefinitionRegistrar接口

public class Myclass2 implements ImportBeanDefinitionRegistrar { //该实现方法默认为空 @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { } }

参数分析:

  • 第一个参数:annotationMetadata 和之前的ImportSelector参数一样都是表示当前被@Import注解给标注的所有注解信息
  • 第二个参数表示用于注册定义一个bean

第二步:编写代码,自定义注册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); } }

第三步:编写TestDemo 类,并标注上使用ImportBeanDefinitionRegistrar方式的Myclass2类

@Import({TestDemo2.class,Myclass.class,Myclass2.class})
public class TestDemo {

        @Bean
        public AccountDao2 accountDao222(){
            return new AccountDao2(); } }

第四步:运行结果
그림 삽입 설명 여기

3、@Import注解的三种使用方式总结

第一种用法:@Import({ 要导入的容器中的组件 } ):容器会自动注册这个组件,id默认是全类名

 

第二种用法:ImportSelector:返回需要导入的组件的全类名数组,springboot底层用的特别多【重点 

 

 

 

第三种用法:ImportBeanDefinitionRegistrar:手动注册bean到容器

以上三种用法方式皆可混合在一个@Import中使用,特别注意第一种和第二种都是以全类名的方式注册,而第三中可自定义方式。

@Import注解本身在springboot中用的很多,特别是其中的第二种用法ImportSelector方式在springboot中使用的特别多,尤其要掌握!

如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

좀 자바 학습 자료와의 큰 파도가, 공용 수에 초점을 환영 자바 전자 책 등 저우 밍 교사 깊이 자바 가상 머신, 자바 프로그래밍 아이디어, 핵심 기술 볼륨, 서쪽으로 디자인 패턴, 자바 병행 프로그래밍 전투로, ... ... 너희는 가서 사람, 톰캣에 빠른 차를 말을하지 않습니다, 자바 성경입니다! 중요한 것은 기술, 동경 기술을 탐구하는 것입니다, 기술의 추구, 좋은 냄비는 친구가 아오고 말했다 ...

그림 삽입 설명 여기

추천

출처www.cnblogs.com/xichji/p/12147926.html