FactoryBean(工厂bean):是bean的加工工厂,是对已知Bean的加工,是一个接口,要实现三个方法:java
① Object getObject()能够对bean进行加工添加功能。框架
② Class getObjectType()。spa
③ Boolean isSingleton()。code
Bf.getBean(“ab”)只是获得MyFactory.getObject()的object对象 因此最后要强转。对象
Beanfactory bean工厂 就是生产bean的工厂,注入:接口
因为Spring IoC容器以框架的方式提供了工厂方法的功能,并以透明的方式给开发者,不过在一些遗留系统或第三方类库中,咱们还会碰到工厂方法,这时用户能够使用Sping使用工厂方法注入的方式进行配置。开发
静态工厂方法:get
不少工厂类方法都是静态的,这意味着用户在无须建立工厂类实例的状况就能够调用工厂类方法。所以静态工厂方法比非静态工厂方法的调用更加方便。咱们将carFactory类的getCar()方法调整为静态的而后再Spring配置以下:class
<bean id=”car” class =”carFactory” factory-method=”getCar”/>
用户直接经过class属性指定工厂类, 而后在经过factory-method指定对应的静态工厂方法建立bean。容器
若是静态工厂方法须要参数则用传入
实例工厂方法:
有些工厂是非静态的,即必须是实例化工厂类才能调用工厂方法。
下面咱们实例化一个工厂类CarFactory类来为Car类提供实例。
package com.car;
public class CarFactory { public Car getCar(){return new Car();}}
工厂类负责建立一个或多个目标类实例,工厂类方法通常以接口或抽象类变量的形式返回目标类。工厂类对外屏蔽了目标类的实例化步骤。调
用甚至不知道如何具体的目标类是什么。
下面咱们在Spring 配置文件中进行配置
<!--工厂Bean生成目标Bean--> <bean id=”carFactory” class=”com.CarFactory”/> <!--工厂Bean目标Bean--> <bean id=”car” factory-bean=”carFactory” factory-method=”getCar”/>
factory-bean=”carFactory”指定了工厂类Bean,factory-method=”getCar”指定了工厂类Bean建立该Bean的工厂方法。
和静态工厂相似若是工厂方法须要参数则用
<p:constructor-arg index=”0”value="calendar"></p:constructor-arg>传入