java框架學習日誌-3

這章主要是補充一些ioc建立對象的方式,ioc容器在寫好<bean></bean>的時候就已經建立對象了。在以前的例子中,一直都是無參的構造方法。下面給出有參的構造方法的對象的建立,沒有什麼難點重點,只是記錄一下。
有參構造函數構造方法有幾種。
第一種方法,經過參數下標來設置。
java代碼: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文件寫法:spring

<?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>

第三種,經過參數類型來設置this

<?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就會報錯。不知道爲何。code

經過工廠方法來建立對象

這裏只須要簡單瞭解一下就好了。知道有這麼個東西,由於spring自己就提供了工廠類,能夠用輪子,幹嗎造輪子。xml

靜態工廠:

先寫一個簡單的靜態工廠,這是一個簡單的靜態工廠,經過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代碼blog

<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>

結果:
io

動態工廠

新建動態工廠class

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裏面設置的。

相關文章
相關標籤/搜索