天天看點

【Spring學習及總結09】建立bean對象的四種方式

文章目錄

    • 建立bean對象的四種方式
      • 1.使用預設的構造函數建立bean對象
      • 2.通過靜态工廠方法建立bean
      • 3.通過執行個體工廠方法建立bean
      • 4.實作FactoryBean接口

目前,我們講了以下幾個知識點:

1.如何擷取bean執行個體,有幾種方式

2.如何為bean的屬性指派(通過構造方法,通過set方法)

3.bean的作用域

下面一個知識點主要來講如何建立bean,java裡面建立對象首先想到的就是通過構造方法建立對象,那麼現在如何建立bean對象呢?

建立bean對象的四種方式

1.使用預設的構造函數建立bean對象

在Spring的配置檔案中使用bean标簽,配置id和class屬性之後,且沒有其他屬性和标簽時,采用的就是預設構造函數建立bean标簽,此時如果類中沒有構造函數,就無法建立對象。

首先寫一個實體類:

@Data
public class Car {
    private String carName;
    private int price;
    private String color;
}
           

實體類中有一個預設的空參數構造函數,拿到ClassPath類路徑以後,通過反射建立car對象。

<bean id="car" class="com.hh.pojo.Car">
</bean>
           

2.通過靜态工廠方法建立bean

靜态工廠:工廠本身 不需要建立對象,通過靜态方法調用

對象=工廠類.工廠方法名();

執行個體工廠:工廠本身需要建立對象

工廠類 工廠對象=new 工廠類();

工廠對象.getAirPlane("張三");

首先寫一個實體類AirPlane

@Data
public class AirPlane {
    //飛機名
    private String name;
    //飛機異常
    private String yc;
    //飛機載客量
    private Integer personNum;
    //飛機機長姓名
    private String jzName;
}
           

寫一個靜态工廠類 AirPlaneStaticFactory,用來建立飛機對象AirPlane

由于靜态工廠類中的方法為靜态的,是以不需要建立靜态工廠對象,直接通過類名調用方法即可。

//靜态工廠
public class AirPlaneStaticFactory {
    //AirPlaneStaticFactory.getAirplane
    //靜态工廠類中的擷取飛機對象的方法時靜态的,可以直接通過類名擷取
    public static AirPlane getAirplane(String jzName){
        System.out.println("靜态工廠正在造飛機....");
        AirPlane airPlane = new AirPlane();
        airPlane.setName("吉祥");
        airPlane.setJzName(jzName);
        airPlane.setPersonNum(500);
        airPlane.setYc("198.89m");
        return airPlane;
    }
}
           

寫配置配置檔案,用來通過靜态工廠類傳回AirPlane對象

class:指定靜态工廠全類名

factory-method:指定工廠方法

constructor-arg:可以為方法傳遞參數

<bean id="airPlane01" class="com.hh.factory.AirPlaneStaticFactory"
factory-method="getAirplane">
    <constructor-arg value="張三"/>
</bean>
           

寫測試類:

public class MyTest4 {
    //根據spring的配置檔案得到ioc容器對象
    ApplicationContext context =
            new ClassPathXmlApplicationContext("spring4.xml");
    @Test
    public void test(){
        System.out.println("容器啟動完成....");
        AirPlane airPlane01 =
                context.getBean("airPlane01", AirPlane.class);
        System.out.println(airPlane01);
    }
}
           
【Spring學習及總結09】建立bean對象的四種方式

3.通過執行個體工廠方法建立bean

執行個體工廠:工廠本身需要建立對象

工廠類 工廠對象=new 工廠類();

工廠對象.getAirPlane("張三");

先寫一個執行個體工廠類,執行個體工廠類需要建立工廠對象,因為裡面的方法不是靜态方法。

//執行個體工廠
public class AirPlaneInstanceFactory {
    //new AirPlaneInstanceFactory().getAirplane
    public AirPlane getAirplane(String jzName){
        System.out.println("靜态工廠正在造飛機....");
        AirPlane airPlane = new AirPlane();
        airPlane.setName("吉祥");
        airPlane.setJzName(jzName);
        airPlane.setPersonNum(500);
        airPlane.setYc("198.89m");
        return airPlane;
    }
}
           

配置檔案:

1.先配置出執行個體工廠對象

2.factory-bean:指定使用哪個工廠執行個體

3.factory-method:使用哪個工廠方法

<!--執行個體工廠的建立-->
<bean id="airPlaneInstanceFactory" 
     class="com.hh.factory.AirPlaneInstanceFactory">
</bean>
<bean id="airplane02" class="com.hh.pojo.AirPlane"
factory-method="getAirplane" factory-bean="airPlaneInstanceFactory">
   <constructor-arg value="李四"/>
</bean>
           

寫一個測試類:

public class MyTest4 {
    //根據spring的配置檔案得到ioc容器對象
    ApplicationContext context =
            new ClassPathXmlApplicationContext("spring4.xml");
    @Test
    public void test1(){
        System.out.println("容器啟動完成....");
        AirPlane airPlane02 =
                context.getBean("airPlane02", AirPlane.class);
        System.out.println(airPlane02);
    }
}
           
【Spring學習及總結09】建立bean對象的四種方式

4.實作FactoryBean接口

實作了FactoryBean接口的類是Spring可以認識的工廠類,Spring會自動調用工廠方法建立執行個體

首先寫一個類實作FactoryBean接口

public class MyFactoryBean implements FactoryBean<Book>{
    //getObject:工廠方法,傳回建立的對象
    public Book getObject() throws Exception {
        Book book = new Book();
        book.setBookName(UUID.randomUUID().toString());
        return book;
    }
    // 傳回建立對象的類型
    public Class<?> getObjectType() {
        return null;
    }
    //isSingleton:是單例嗎?
    public boolean isSingleton() {
        return false;
    }
}
           

在配置檔案中配置這個類:

<!--FactoryBean:Spring規定的一個接口-->
<bean id="myFactoryBean" class="com.hh.controller.MyFactoryBean">
</bean>
           
【Spring學習及總結09】建立bean對象的四種方式
上一篇: 黑化的牛牛
下一篇: 慶祝61