Springboot中常见的@Import注解的三种使用方式详解

导读:本篇文章讲解 Springboot中常见的@Import注解的三种使用方式详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

环境:springboot2.3.9.RELEASE


三种方法说明

  1. 直接导入普通数组的方式

  2. 导入ImportSelector类方式

  3. 导入ImportBeanDefinitionRegistrar方式

被导入的类加入到Spring IOC容器中。

直接导入普通数组的方式

public class A {
  @Bean
  public B b() {
    return new B() ;
  }
}
@Import({A.class})
@Configuration
public class ImportConfig {
}

这样A,B都被Spring IOC容器管理了。这里可以导入多个类。

注意:在Spring4.2之前的版本中被导入的类必须是配置类也就是类上有@Configuration注解,4.2后的版本随意一个普通类也可以。

测试:

@Resource
private A a ;
@Resource
private B b ;
	
@Test
public void testImport() {
  System.out.println("a = " + a) ;
  System.out.println("b = " + b) ;
}

Springboot中常见的@Import注解的三种使用方式详解

 

导入ImportSelector类方式

通过实现ImportSelector接口

public class E {
  @Bean
  public G g() {
    return new G() ;
  }
}
public class F {
}
public class G {
}
@Import({C.class, A.class})
@Configuration
public class ImportConfig {
}
public class C implements ImportSelector {

  @Override
  public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    return new String[] {"com.pack.import_annotation.E", "com.pack.import_annotation.F"};
  }

}

这里的返回值中必须是完整的包名+类名

注意:这里可以返回空的String数组(length = 0),但是不能返回null。实现ImportSelector该接口的这个本身是不会被注册为Bean的。

测试:

@Resource
private E e ;
@Resource
private F f ;
@Resource
private G g ;
	
@Test
public void testImport() {
  System.out.println("e = " + e) ;
  System.out.println("f = " + f) ;
  System.out.println("g = " + g) ;
}

图片

 

导入ImportBeanDefinitionRegistrar方式

public class H implements ImportBeanDefinitionRegistrar {

  @Override
  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition() ;
    beanDefinition.setBeanClass(X.class) ;
    beanDefinition.getPropertyValues().addPropertyValue("name", "张三") ;
    registry.registerBeanDefinition("x", beanDefinition) ;
	}

}
public class X {
	
  private String name ;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
	
}
@Import({C.class, A.class, H.class})
@Configuration
public class ImportConfig {
}

测试:

图片

 

注意:实现
ImportBeanDefinitionRegistrar该接口本身这个类是不会被注册为Bean的。

完毕!!!

给个关注+转发呗谢谢

 

Springboot中常见的@Import注解的三种使用方式详解

Springboot基础使用@Conditional多条件注册Bean

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/80004.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!