实验5-配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean:
说明:工厂模式帮助我们创建对象,有一个专门帮我们创建对象的类,这个类就是工厂类。使用生成该类直接进行传参就行了,就像
AirPlane ap = AirPlaneFactory.getAirPlane(String jzName);
- 工厂分为两类:
- 静态工厂:工厂本身不用创建对象,通过静态方法调用,对象 = 工厂类.工厂方法名。
- 实例工厂:工厂本身需要创建对象,工厂类 对象 = new 工厂类;
<!--静态工厂配置
class="AirPlaneStaticFactory":指定工厂的全类名。
factory-method="getAirPlane":这是在指定工厂方法。
<constructor-arg name="jzName" value="lisi"></constructor-arg>:为方法进行传参。
-->
<bean id="airPlane01" class="AirPlaneStaticFactory" factory-method="getAirPlane">
<!-- constructor-arg可以为方法传参-->
<constructor-arg name="jzName" value="lisi"></constructor-arg>
</bean>
<!--实例工厂:
1.先配置实例工厂对象
2.配置我们要创建的对象要使用哪个工厂进行创建
-->
<bean id="airPlaneInstanceFactory" class="AirPlaneInstanceFactory"></bean>
<bean id="airplane02" class="AirPlane" factory-bean="airPlaneInstanceFactory"
factory-method="getAirPlane">
<constructor-arg value="wangwu"></constructor-arg>
</bean>
<!--FactoryBean:是spring规定的一个接口。只要是这个接口的实现类,spring都认为这是一个
工厂。获取的时候才创建对象-->
<bean id="myFactoryBeanImple" class="implement.MyFactoryBeanImple">
</bean>
package implement;
import org.springframework.beans.factory.FactoryBean;
import java.awt.print.Book;
/**
* 1.编写一个FactoryBean的实现
* 2.在spring配置文件中进行注册
*/
public class MyFactoryBeanImple implements FactoryBean<Book> {
//返回创建的对象
public Book getObject() throws Exception {
Book book = new Book();
return book;
}
//返回创建对象的类型
public Class<?> getObjectType() {
return Book.class;
}
//是单例对象吗?
public boolean isSingleton() {
return false;
}
}
public class AirPlaneStaticFactory {
//静态工厂,直接通过对象方法调用。
public static AirPlane getAirPlane(String jzName){
AirPlane airPlane = new AirPlane();
airPlane.setFdj("伽利略");
airPlane.setFjsName("jiajia");
airPlane.setJzName(jzName);
airPlane.setPersonNumber(800);
airPlane.setYc("120");
return airPlane;
}
}
public class AirPlaneInstanceFactory {
//需要先创建对象new AirPlaneInstanceFactory().getAirPlane
public AirPlane getAirPlane(String jzName){
AirPlane airPlane = new AirPlane();
airPlane.setFdj("伽利略");
airPlane.setFjsName("jiajia");
airPlane.setJzName(jzName);
airPlane.setPersonNumber(800);
airPlane.setYc("120");
return airPlane;
}
}
public class AirPlane {
private String fdj;
private String yc;
private Integer personNumber;
private String jzName;
private String fjsName;
public String getFdj() {
return fdj;
}
public void setFdj(String fdj) {
this.fdj = fdj;
}
public String getYc() {
return yc;
}
public void setYc(String yc) {
this.yc = yc;
}
public Integer getPersonNumber() {
return personNumber;
}
public void setPersonNumber(Integer personNumber) {
this.personNumber = personNumber;
}
public String getJzName() {
return jzName;
}
public void setJzName(String jzName) {
this.jzName = jzName;
}
public String getFjsName() {
return fjsName;
}
public void setFjsName(String fjsName) {
this.fjsName = fjsName;
}
@Override
public String toString() {
return "AirPlane{" +
"fdj='" + fdj + '\'' +
", yc='" + yc + '\'' +
", personNumber=" + personNumber +
", jzName='" + jzName + '\'' +
", fjsName='" + fjsName + '\'' +
'}';
}
}