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的注册时进行使用的方式.

  • 相关阅读:
    [转载]memcached完全剖析--1. memcached的基础
    I/O多路复用
    How to install the zsh shell in Linux && how to set it as a default login shell
    深入理解计算机中的 csapp.h和csapp.c
    (一)网络编程基础之套接字入门
    crx
    t
    武汉第一例肺炎病例
    C语言 ## __VA_ARGS__ 宏
    NLP之中文分词cppjieba
  • 原文地址:https://www.cnblogs.com/trekxu/p/9094871.html
Copyright © 2011-2022 走看看