1. 程式人生 > >java框架學習日誌-3

java框架學習日誌-3

這章主要是補充一些ioc建立物件的方式,ioc容器在寫好<bean></bean>的時候就已經建立物件了。在之前的例子中,一直都是無參的構造方法。下面給出有參的構造方法的物件的建立,沒有什麼難點重點,只是記錄一下。
有參建構函式構造方法有幾種。
第一種方法,通過引數下標來設定。
java程式碼:

package cn.sxt.ov;

public class User {
    private String name;
    private int age;
    /**有引數函式構造方法*/
    public User(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void show(){
        System.out.println("俺是"+name+",今年"+age);
    }
}

xml檔案寫法:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg index="0" value="張三"/>
        <constructor-arg index="1" value="18"/>
    </bean>

</beans>

constructor-arg關鍵字就是用來構造有參函式時傳引數的。index是引數的下標,從0開始,<constructor-arg index="0" value="張三"/>就是第一個引數傳張三。
第二種,通過名字來傳引數,就和以前給變數賦值一樣:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg name="name" value="張三"/>
        <constructor-arg name="age" value="18"/>
    </bean>

</beans>

第三種,通過引數型別來設定

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="user" class="cn.sxt.ov.User">
        <constructor-arg type="String" value="吳彥祖"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="男"/>


    </bean>

</beans>

通過引數型別來設定,如果有一樣的型別,就按照先後順序,注意String可以換成java.lang.String。但是int換成java.lang.Integer或者Integer就會報錯。不知道為什麼。

通過工廠方法來建立物件

這裡只需要簡單瞭解一下就行了。知道有這麼個東西,因為spring本身就提供了工廠類,可以用輪子,幹嘛造輪子。

靜態工廠:

先寫一個簡單的靜態工廠,這是一個簡單的靜態工廠,通過newInstance方法來建立物件

package cn.sxt.factory;

import cn.sxt.ov.User;

public class UserFactory {
    private static User newInstance(String name,int age,String sex){
        return new User(name,age,sex);
    }
}

xml程式碼

<bean id="user1" class="cn.sxt.factory.UserFactory" factory-method="newInstance">
        <constructor-arg type="String" value="張曼玉"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="女"/>
    </bean>

結果:

動態工廠

新建動態工廠

package cn.sxt.factory;

        import cn.sxt.ov.User;

public class UserDynamicFactory {
    private  User newInstance(String name,int age,String sex){
        return new User(name,age,sex);
    }
}

xml檔案,這裡需要改一下靜態工廠程式碼,將靜態工廠的class改成factory-bean,然後引用動態工廠的id。

    <bean id="user1" factory-bean="user2" factory-method="newInstance">
        <constructor-arg type="String" value="張曼玉"/>
        <constructor-arg type="int" value="15"/>
        <constructor-arg type="String" value="女"/>
    </bean>

    <bean id="user2" class="cn.sxt.factory.UserDynamicFactory">
    </bean>

注意這裡的值還是在user1裡面設定的。