spring1-test5-配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean

实验5-配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean:

说明:工厂模式帮助我们创建对象,有一个专门帮我们创建对象的类,这个类就是工厂类。使用生成该类直接进行传参就行了,就像
AirPlane ap = AirPlaneFactory.getAirPlane(String jzName);

  • 工厂分为两类:
    1. 静态工厂:工厂本身不用创建对象,通过静态方法调用,对象 = 工厂类.工厂方法名。
    2. 实例工厂:工厂本身需要创建对象,工厂类 对象 = 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 + '\'' +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值