zoukankan      html  css  js  c++  java
  • spring 给容器中注册组件的几种方式

    1.@Bean 导入第三方的类或包的组件 

    2.包扫描+组件的标注注解(@ComponentScan: @Controller,@service,@Reponsitory,@Componet), 自己写的类

    3.@Import[可以快速给容器中导入一个或者多个组件]
            1@Import(要导入到容器中的组件):容器中就会自动注册这个组件,id默认是全类名

             

    @Configuration
    @Import(value = {Student.class,Teacher.class})
    public class MainConfig {
    }

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

       实现ImportSelector接口类

    public class TestImportSelector implements ImportSelector {
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[]{"cn.qin.bean.Student","cn.qin.bean.Teacher"};
        }
    }
     配置类
    @Configuration @Import(value
    = {TestImportSelector.class}) public class MainConfig { }

          3  ImportBeanDefinitionRegistrar:手动注册bean到容器中
         实现接口类 

       

    public class TestImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
        /***
         * AnnotationMetadata 当前类注解信息
         * BeanDefinitionRegistry BeanDefinition 注册类
         把所有需要添加到容器中的bean加入
         */
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            //如果容器中存在Student 则注入Teacher
            if(registry.containsBeanDefinition("Student"))
            {
                //对Teacher进行封装
                RootBeanDefinition beanDefinition=new RootBeanDefinition(Teacher.class);
                //注册Teacher
                registry.registerBeanDefinition("Teacher",beanDefinition);
            }
        }
    }

    配置类

    @Configuration
    @Import(value = {TestImportBeanDefinitionRegistrar})
    public class MainConfig {
    
    }

    4 使用spring提供的FactoryBean(工厂Bean) 注册 

    实现接口类

    public class TestFactoryBean implements FactoryBean<Person> {
        //获取对象
        public Person getObject() throws Exception {
            return new Person();
        }
        //获取对象类型
        public Class<?> getObjectType() {
            return Person.class;
        }
       //是否单例
        public boolean isSingleton() {
            return true;
        }
    }

    配置类  这里用@bean 方式注入

    @Configuration
    public class MainConfig {
    
    
        @Bean
        public TestFactoryBean testFactoryBean(){
            return new TestFactoryBean();
        }
    
    }
    Object object1=context.getBean("testFactoryBean");//默认获取到的是工厂bean调用getObject创建的对象
    
    Object object2=context.getBean("&testFactoryBean");//要获取工厂Bean本身,我们需要给id前面加一个&
  • 相关阅读:
    mysql定时删除数据
    【video__播放】视频播放插件video7.4.1使用
    【ueditor__使用】百度ueditor富文本编辑器
    【 CSS__样式收集】常用样式案例收集整理
    【Layui__监听button】在form中监听按钮事件
    【Layui__分页和模板】分页和模板的整合使用
    【Layui__模板引擎】layui.laytpl
    DataTable转list
    反射方法创建委托
    EPPlusHelper
  • 原文地址:https://www.cnblogs.com/qin1993/p/11671615.html
Copyright © 2011-2022 走看看