Spring-Bean-工厂bean-静态工厂

静态工厂、实例工厂、FactoryBean接口

bean的创建默认就是框架利用反射new出来的bean实例

有一些复杂的类

工厂模式:工厂帮我们创建对象

有一个专门帮我们创建对象的类,这个类就是工厂

 

静态工厂:工厂本身不用创建对象;通过静态方法调用

实例工厂:工厂本身需要创建对象,先new工厂类,再调用工厂对象的方法

静态工厂

 

(1)创建静态工厂类、AirPlane

 

public class AirPlaneStaticFactory {

    public static AirPlane getAriPlaneByCaptainName(String captainName)
    {
        System.out.println("静态工厂正在为你造飞机");
        AirPlane airPlane=new AirPlane();
        airPlane.setAirName("爱国者号");
        airPlane.setCaptainName(captainName);
        airPlane.setColor("red");
        airPlane.setCustomerNumber(200);
        return airPlane;
    }
}
public class AirPlane {
    private String captainName;
    private Integer customerNumber;
    private String airName;
    private String color;

    public AirPlane() {
    }

    public void setCaptainName(String captainName) {
        this.captainName = captainName;
    }

    public void setCustomerNumber(Integer customerNumber) {
        this.customerNumber = customerNumber;
    }

    public void setAirName(String airName) {
        this.airName = airName;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "AirPlane{" +
                "captainName='" + captainName + '\'' +
                ", customerNumber=" + customerNumber +
                ", airName='" + airName + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}

 

(2)配置文件

 

<!--  静态工厂  -->
<!--  class:指定静态工厂全类名  -->
<!--  factory-method:指定哪个方法是工厂方法  -->
<!--  constructor-arg:可以设置指定方法的参数  -->
<bean id="airPlane" class="com.orz.spring.bean.AirPlaneStaticFactory" factory-method="getAriPlaneByCaptainName">
    <constructor-arg name="captainName" value="李伟"/>
</bean>

 

(3)测试

 

@Test
public void test1()
{
    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
    AirPlane airPlane = applicationContext.getBean("airPlane", AirPlane.class);
    System.out.println(airPlane);
}

 

(4)结果

 

静态工厂正在为你造飞机
AirPlane{captainName='李伟', customerNumber=200, airName='爱国者号', color='red'}

 

posted @ 2020-10-19 14:29  orz江小鱼  阅读(113)  评论(0编辑  收藏  举报