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前面加一个&