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前面加一个&
原文地址:https://www.cnblogs.com/qin1993/p/11671615.html