给容器中添加bean的方式:
导入第三方的组件 :就是没有@Controller@Service等一系列注解 ,并且无法进行包扫描那么我们可以使用一下方式来进行导入
@Import 第一种用法就是@Import(要导入到容器中的组件),容器会自动的注册这个组件,id默认是全类名
* 第二种用法 Class<?>[] 还可以导入多个{Color.class, Red.class}
* 第三种,ImportSelector :返回需要导入的组件的全类名数组,需要建一个类进行实现ImportSelector
* ImportBeanDefinitionRegistrar
@Import({Color.class, Red.class, MyImportSelector.class})
/*
* 使用spring提供的FactoryBean (工厂Bean)
* 1),默认获取的是工厂bean调用getObject创建的对象
* 2.要获取工厂Bean本身需要给id前边加&
*
*
* */
@Bean
public ColorFactoryBean colorFactoryBean(){
return new ColorFactoryBean();
}
package com.aaa.bean;
import org.springframework.beans.factory.FactoryBean;
public class ColorFactoryBean implements FactoryBean {
//要返回的对象 这个对象会添加到容器中
public Object getObject() throws Exception {
System.out.println("返回的对象时"+new Blue());
Blue blue = new Blue();
return blue;
}
//要返回的对象类型
public Class<?> getObjectType() {
return Blue.class;
}
//如果返回的true 就是单实例
//否则就是多实例
public boolean isSingleton() {
return false;
}
}
测试
AnnotationConfigApplicationContext apx = new AnnotationConfigApplicationContext(MainConfig2.class);
@Test
public void Import(){
//打印所有注册到bean的名称
String[] definitionNames = apx.getBeanDefinitionNames();
for (String name : definitionNames) {
System.out.println(name);
}
//工厂Bean获取的是调用getObject创建的对象
Object colorFactoryBean = apx.getBean("colorFactoryBean");
System.out.println("bean的类型"+colorFactoryBean.getClass());
}