zoukankan      html  css  js  c++  java
  • Spring将Bean导入IOC容器

    @Import 注解可以普通类导入到 IoC容器中。

    想要让一个普通类接受 Spring 容器管理,有以下方法

    • 使用 @Bean 注解
    • 使用 @Controller @Service @Repository @Component 注解标注该类,然后再使用 @ComponentScan 扫描包
    • @Import 方法,即现在这种方式

    Student 类

    public class Student {
    }

    配置类

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

    测试代码

        @Test
        public void test7() {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(ImportConfig.class);
            String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
            for (String name : beanDefinitionNames) {
                System.out.println(name);
            }
        }
    

      

    观察有没有 Student 产生的 bean

    结果


     
    bean成功创建

    以上导入普通的 Java 并将其声明为一个 bean 功能在 4.2 之后才可以使用在 spring 4.2 以前,该注解,只能导入配置类,其功能与 <import /> 标签类似


    ImportSelector

    ImportSelector : 返回需要导入的组件的全类名数组

    MySelector 类

    public class MySelector implements ImportSelector {
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[]{"me.sjl.bean.Person"};
        }
    }
    

      

    配置类

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

      

    测试代码不变,直接看结果


     
    Person 类被加载

    ImportBeanDefinitionRegistrar

    BeanDefinitionRegistrar

    public class MyBeanDefinitionRegistrat implements ImportBeanDefinitionRegistrar {
        
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            BeanDefinition beanDefinition = new RootBeanDefinition(Person.class);
            registry.registerBeanDefinition("PERSON", beanDefinition);
        }
    }
    

      

    配置类

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

      

    测试代码不变,直接看结果,看看是否有 PERSON 这个组件


     
    PERSON 成功注册
  • 相关阅读:
    curl java 模拟http请求
    Redis 个人理解总结
    算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?
    RESTful 个人理解总结
    springcloud(五):熔断监控Hystrix Dashboard和Turbine
    springcloud(四):熔断器Hystrix
    springcloud(三):服务提供与调用
    springcloud(二):注册中心Eureka
    springcloud(一):大话Spring Cloud
    Spring Cloud在国内中小型公司用的起来吗?
  • 原文地址:https://www.cnblogs.com/itplay/p/10660231.html
Copyright © 2011-2022 走看看