beanfactory是spring的bean工厂,有getbean方法,从里面可以获得对象;
Factorybean是spring的一个bean,自定义的bean可以实现这个FactoryBean,重写里面三个方法;
FactoryBean的使用方式(代码演示)
首先创建一个类SunBean实现FactoryBean接口,加上component注解交给spring管理,改名称为"SUN",重写里面三个方法,注意这个getObject()方法,里面返回的是
我创建的一个另外的自定义对象wolf.
@Component("SUN")
public class SunBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
return new wolf();
}
@Override
public Class<?> getObjectType() {
return wolf.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
wolf:
public class wolf {
}
下面是客户端测试的代码:
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext al=new AnnotationConfigApplicationContext(SunBean.class);
SunBean sunchengwu = (SunBean) al.getBean("SUN");
}
}
此时报了类型转换异常
image.png
说这个Bean是wolf类型,不能强转SunBean,说明按照名字拿的是getObject方法返回的对象
但是如果我在"SUN"前面加个"&"
此时就不会报错,此时拿的就是继承FactoryBean的那个Bean
image.png