FactoryBean,spring bean容器对bean的管理简单的说就是通过xml配置或者注解 将bean定义解析成Beandefine缓存起来,然后getBean的时候通过Beandefine实例化出所需的bean,但是如果遇到很复杂的bean的时候 xml配置或者注解就会显得有心无力了,spring-FactoryBean就是为了解决上述问题的,
FactoryBean用法很简单 只需要实现FactoryBean.java接口就可以了 接口提供三个方法
public interface FactoryBean<T> {
/**
* 返回上述所说的复杂对象
*/
T getObject() throws Exception;
/**
* 返回对象类型
*/
Class<?> getObjectType();
/**
* 返回bean是否为单利模式,如果是单利模式则创建的对象会缓存到单利缓存池中
*/
boolean isSingleton();
}
eg:
public class Car {
}
/**
* 通过实现factoryBean接口往容器中注册组件
*/
public class CarFactoryBean implements FactoryBean<Car> {
@Override
public Car getObject() throws Exception {
return new Car();
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
@Configuration
public class MainConfig {
@Bean
public CarFactoryBean carFactoryBean() {
return new CarFactoryBean();
}
}
public class MainClass {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
//获取car对象
Object bean = ctx.getBean("carFactoryBean");
System.out.println(bean);
//回去FactoryBean对象
Object bean2 = ctx.getBean("&carFactoryBean");
System.out.println(bean2);
}
}