這章主要是補充一些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裏面設置的。