接上一篇IOC入門
IOC創建對象的幾種方式
1)調用無參數構造器
2)帶參數構造器
3)工廠創建對象
工廠類:靜態方法創建對象
工廠類:非靜態方法創建對象
1、對之前的User類進行一些修改,加上一個無參數構造器和一個帶參數構造器
public User(){ super(); System.out.println("無參數構造器"); } public User(int id, String name){ System.out.println("帶參數構造器"); this.id = id; this.name = name; }
1.1、調用無參數構造器創建對象
<bean id="user" class="com.isoftstone.bean.User"></bean> <!--無參數-->
@Test
public void testIOC(){
//創建容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("com/isoftstone/xml/applicationContext.xml");
//獲取容器中的對象
User user = (User)ac.getBean("user");
}
//輸出"無參數構造器"
1.2、調用有參數構造器創建對象
<!-- 調用帶參數構造器 --> <!--方法1--> <bean id="user" class="com.isoftstone.bean.User"> <constructor-arg value="100" index="0" type="int" ></constructor-arg> <constructor-arg value="StanLong" index="1" type="java.lang.String"></constructor-arg> </bean>
<!--方法二 依賴參數--> <bean id="str" class="java.lang.String"> <constructor-arg value="StanLong"></constructor-arg> </bean> <bean id="user" class="com.isoftstone.bean.User"> <constructor-arg index="0" type="int" value="100" ></constructor-arg> <constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
</bean>
@Test
public void testIOC(){
//創建容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("com/isoftstone/xml/applicationContext.xml");
//獲取容器中的對象
User user = (User)ac.getBean("user");
System.out.println(user.getId());
System.out.println(user.getName());
}
//輸出"帶參數構造器 100 StanLong"
1.3、通過工廠類創建對象
//先創建一個工廠類
//工廠類 public class ObjectFactory { //實例方法創建對象 public User getInstance(){ return new User(100, "調用實例方法"); } //靜態方法創建對象 public static User getStaticInstance(){ return new User(101, "調用靜態方法"); } }
1.3.1 實例方法
<!-- 工廠類創建對象 --> <!-- #實例方法 --> <!-- 先創建工廠 --> <bean id="factory" class="com.isoftstone.factory.ObjectFactory"> </bean> <!-- 再創建User對象、用factory實例方法 --> <bean id="user" factory-bean="factory" factory-method="getInstance"> </bean>
@Test public void testIOC(){ //創建容器對象 ApplicationContext ac = new ClassPathXmlApplicationContext("com/isoftstone/xml/applicationContext.xml"); //獲取容器中的對象 User user = (User)ac.getBean("user"); System.out.println(user.getId()); System.out.println(user.getName()); } //輸出"帶參數構造器 100 調用實例方法"
1.3.2 靜態方法
<!-- #工廠類的靜態方法 --> <bean id="user" class="com.isoftstone.factory.ObjectFactory" factory-method="getStaticInstance"> </bean>
@Test public void testIOC(){ //創建容器對象 ApplicationContext ac = new ClassPathXmlApplicationContext("com/isoftstone/xml/applicationContext.xml"); //獲取容器中的對象 User user = (User)ac.getBean("user"); System.out.println(user.getId()); System.out.println(user.getName()); } //輸出"帶參數構造器 101 調用靜態方法"