zoukankan      html  css  js  c++  java
  • 021 使用@Import注解完成Bean的注册

    一 . 概述

    在之前我们使用@Bean或者组件扫描器加上组件标记注解向容器中注册组件.

    在spring之中,也提供了另外一种方式帮助我们注册组件.

    这个组件就是@Import的方式,

    使用这种方式的原因就是我们希望在一定程度上可以控制如何注入Bean.


     二 .注解的测试

    组件类:

    public class Person {
    
    }

    配置类:

    @Configuration
    @Import({Person.class})
    public class ImportConfig {
        
    }

    测试类:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes=ImportConfig.class)
    public class ImportTest {
        
        @Autowired
        private ApplicationContext context;
        
        @Test
        public void test() {
            System.out.println(context.getBean(Person.class));
        }
    } 

    我们现在可以使用@Import的方式直接将组件注册到IOC容器之中.

    此时注册的组件仅仅是一个含有无参构造函数的POJO类,且id为全类名.

    另外@Import支持更加强大的注册功能.

    上面演示的是直接引入一个Bean的形式.


     三 .组件类实现ImportSelector接口.

    在@Import之中,还可以导入实现了ImportSelector接口的类.

      这个类中的方法表示需要导入的类的全类名.

    public class MyImportSelector implements ImportSelector{
    
        @Override
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[] {"com.trek.springConfig.importTest.Person"};
        }
    
    }

    该实现类需要返回一组类的全类名.


     四 .实现ImportBeanDefinitionRegistrar接口

    我们可以通过这个接口的实现类完成自定义的Bean的注册.

    public class ImportRegister implements ImportBeanDefinitionRegistrar{
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            BeanDefinition BeanDefinition = new RootBeanDefinition(Person.class);
            //使用注册器完成对象的注册
            registry.registerBeanDefinition("person", BeanDefinition );
        }
    
    }

    我们现在需要注意的就是,这些注解式spring底层完成Bean的注册时进行使用的方式.

  • 相关阅读:
    根据会员权限显示指定字段教程与源码
    关键字替换排除HTML标签属性字符
    C# 图片处理(压缩、剪裁,转换,优化)
    点击按钮后表单自动提交的问题
    浏览器中添加收藏当前网页
    Javascript基础知识整理
    JS中不同类型的值比较问题
    ACM训练场
    sencha/extjs 动态创建grid表格
    sencha 报错问题汇总
  • 原文地址:https://www.cnblogs.com/trekxu/p/9094871.html
Copyright © 2011-2022 走看看