什么是工厂模式?
spring的bean的创建原理就是框架利⽤反射创建出实例对象,那么工厂模式是什么?
⼯⼚模式:有⼀个专门帮我们创建对象的类,我们把这个类叫做⼯⼚类。
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和FactoryBean其实没有什么比较性的,只是两者的名称特别接近,所以有时候会拿出来比较一番,BeanFactory是提供了OC容器最基本的形式,给具体的IOC容器的实现提供了规范,FactoryBean可以说为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,我们可以在getObject()方法中灵活配置。其实在Spring源码中有很多FactoryBean的实现类,要想深入准确的理解FactoryBean,只有去读读Spring源码了。