使用ImportBeanDefinitionRegistrar将一个自定义类动态注册bean中的案例详解

乔欣 Spring 发布时间:2022-12-10 22:41:36 阅读数:2406 1
下文笔者讲述spring中将类注册到Spring容器中的方法分享,如下所示

ImportBeanDefinitionRegistrar简介

ImportBeanDefinitionRegistrar:
   他是Spring框架中的一个接口
   我们使用这个接口,可以将自己写的代码封装为一个BeanDefinition对象
实现此接口的类都会回调postProcessBeanDefinitionRegistry方法
   然后注册到spring容器中
   
注意事项:
   注册bean到spring容器有 @Service @Component等注解方式
    还有一种方式就是实现此接口的类

自定义类注册到IOC容器中的方法

实现思路:
    通过实现一个ImportBeanDefinitionRegistrar接口的类的方式 
	达到将类注册到SpringIOC容器中
例:
1.定义一个自定义类
  public class UserService {

  }

2.自定义ImportBeanDefinitionRegistrar实现类手动注册bean

  public class TestImportBeanDefinitionRegistrar 
          implements ImportBeanDefinitionRegistrar {

      @Override
      public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
                                          BeanDefinitionRegistry registry) {
  
          //扫描注解
          Map<String, Object> annotationAttributes = importingClassMetadata
              .getAnnotationAttributes(ComponentScan.class.getName());
          String[] basePackages = (String[]) annotationAttributes.get("basePackages");
  
          //扫描类
          ClassPathBeanDefinitionScanner scanner =
                  new ClassPathBeanDefinitionScanner(registry, false);
          TypeFilter userServiceFilter = new AssignableTypeFilter(UserService.class);
          
          scanner.addIncludeFilter(userServiceFilter);
          scanner.scan(basePackages);
      }
  
  }

定义一个配置类发现一下上面的ImportBeanDefinitionRegistrar实现类

  @Configuration
  @ComponentScan("com.java265.**")
  @Import(TestImportBeanDefinitionRegistrar.class)
  public class TestConfiguration {
  
  }

测试类是否在IOC容器中

  @RunWith(SpringRunner.class)
  @SpringBootTest
  @ContextConfiguration(classes = {TestConfiguration.class})  
  public class DemoApplicationTest2 {
  
      @Resource
      UserService userService;
   
      @Test
      public void contextLoads(){
          System.out.println(userService.getClass());
      }
  }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202212/5111.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者