什么是工厂模式?
spring的bean的创建原理就是框架利⽤反射创建出实例对象,那么工厂模式是什么?
⼯⼚模式:有⼀个专门帮我们创建对象的类,我们把这个类叫做⼯⼚类。
Eg:Plane plane = PlaneFactory.getPlane(String name);
工厂模式是怎么体现的?
⼯⼚有分为静态⼯⼚和实例⼯⼚。
静态⼯⼚:
也即是调⽤⽅法的时候,直接是xxxFactory().getXxx(); 他的实例对象的创建在static⽅法中。
实例⼯⼚:
他和静态⼯⼚的区别就是获得实例的⽅法是⾮静态的,要想使⽤⼯⼚类来创建对象就要先new ⼯⼚再调⽤getInstance⽅法。
使⽤实例⼯⼚创建对象,配置⽂件操作:
使⽤静态⼯⼚创建对象,配置⽂件操作:
FactoryBean是spring框架可以识别的⼯⼚接⼝,写⼀个实现类,实现这个接⼝,测试他的⼀些⽅法。
我们直接配置这个实现接⼝的⼯⼚类
@Test
void test04()
{
Object myFactoryBean = context.getBean(“myFactoryBean”); Object myFactoryBean2 = context.getBean(“myFactoryBean”); System.out.println(myFactoryBean==myFactoryBean2);
}
测试结果:
我帮你造了个汽车!!! true
当然要是在isSingleton()⽅法中将返回值改为false,两个对象就不相等了,直接是false。当输出两个⼯⼚对象时,我们发现输出的是car的属性值,也就是说我们这个⼯⼚实现类其实就是相当于⼀个Car类。但是不能直接调⽤Car内部的⽅法。需要在getObject()⽅法中设置参数,即System.out.println(myFactoryBean.toString());//Car{name=‘红旗’, price=110000, color=‘red’} System.out.println(myFactoryBean2.toString());//Car{name=‘红旗’, price=110000, color=‘red’}
FactoryBean实现的类所创建的对象是在使⽤的的时候才创建并不是容器已加载就创建。
FactoryBean和BeanFactory有什么区别?
在学习过程中遇到了一个疑惑,遂查询了资料并写在这里,供自己温习。
BeanFactory
是一个大工厂,是IOC容器的根基,有繁琐的bean
生命周期处理过程,可以生成出各种各样的Bean
FactoryBean
是一个小工厂,它自己也是一个Bean
,但是可以生成其他Bean