java框架學習日誌-3
阿新 • • 發佈:2018-12-12
這章主要是補充一些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裡面設定的。