阿里健康大藥房,仁和痛貼靈 6 貼 9.9 元
阿新 • • 發佈:2021-07-20
springIOC
IOC建立物件方式
1. 通過無參構造方法建立
- User.java (預設有無參構造方法)
public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println("我的名字是:"+name); } }
- beans.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.xsd"> <bean id="user" class="com.dingcd.pojo.User"> <property name="name" value="dingcd"/> </bean> </beans>
- 測試類
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在執行getBean的時候, user已經建立好了 , 通過無參構造
User user = context.getBean("user", User.class);
//呼叫物件的方法
user.show();
}
結果可以發現,在呼叫show方法之前,User物件已經通過無參構造初始化了!
2. 通過有參構造方法建立
- UserT.java
public class UserT {
private String name;
public UserT(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("我的名字是:"+name);
}
}
- beans.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.xsd">
<!-- 第一種根據index引數下標設定 -->
<bean id="userT" class="com.dingcd.pojo.UserT">
<constructor-arg index="0" value="dingcd"/>
</bean>
<!-- 第二種根據引數名字設定 -->
<bean id="userT" class="com.dingcd.pojo.UserT">
<!-- name指引數名 -->
<constructor-arg name="name" value="dingcd"/>
</bean>
<!-- 第三種根據引數型別設定 -->
<bean id="userT" class="com.dingcd.pojo.UserT">
<constructor-arg type="java.lang.String" value="dingcd"/>
</bean>
</beans>
- 測試類
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserT user = context.getBean("userT",UserT.class);
user.show();
}
3. 別名
alias 設定別名 , 為bean設定別名 , 可以設定多個別名
<!--設定別名:在獲取Bean的時候可以使用別名獲取-->
<alias name="userT" alias="userNew"/>
4.import
團隊的合作通過import來實現 .
<import resource="{path}/beans.xml"/>
IOC注入方式
測試pojo類 :
Address.java
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Student.java
package com.dingcd.pojo; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> card; private Set<String> games; private String wife; private Properties info; public void setName(String name) { this.name = name; } public void setAddress(Address address) { this.address = address; } public void setBooks(String[] books) { this.books = books; } public void setHobbys(List<String> hobbys) { this.hobbys = hobbys; } public void setCard(Map<String, String> card) { this.card = card; } public void setGames(Set<String> games) { this.games = games; } public void setWife(String wife) { this.wife = wife; } public void setInfo(Properties info) { this.info = info; } public void show(){ System.out.println("name="+ name + ",address="+ address.getAddress() + ",books=" ); for (String book:books){ System.out.print("<<"+book+">>\t"); } System.out.println("\n愛好:"+hobbys); System.out.println("card:"+card); System.out.println("games:"+games); System.out.println("wife:"+wife); System.out.println("info:"+info); } }
1.常量注入
<bean id="student" class="com.dingcd.pojo.Student"> <property name="name" value="小明"/></bean>
2.Bean注入
<bean id="addr" class="com.dingcd.pojo.Address"> <property name="address" value="重慶"/> </bean> <bean id="student" class="com.dingcd.pojo.Student"> <property name="name" value="小明"/> <property name="address" ref="addr"/> </bean>
3.陣列注入
<bean id="student" class="com.dingcd.pojo.Student"> <property name="name" value="小明"/> <property name="address" ref="addr"/> <property name="books"> <array> <value>西遊記</value> <value>紅樓夢</value> <value>水滸傳</value> </array> </property> </bean>
4.List注入
<property name="hobbys"> <list> <value>聽歌</value> <value>看電影</value> <value>爬山</value> </list> </property>
5.Map注入
<property name="card"> <map> <entry key="中國郵政" value="456456456465456"/> <entry key="建設" value="1456682255511"/> </map> </property>
6.set注入
<property name="games"> <set> <value>LOL</value> <value>BOB</value> <value>COC</value> </set> </property>
7.Null注入
<property name="wife"><null/></property>
8.Properties注入
<property name="info"> <props> <prop key="學號">20190604</prop> <prop key="性別">男</prop> <prop key="姓名">小明</prop> </props> </property>
9.p命名和c命名注入
User.java :【注意:這裡沒有有參構造器!】
public class User { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
1、P名稱空間注入 : 需要在標頭檔案中加入約束檔案
匯入約束 : xmlns:p="http://www.springframework.org/schema/p" <!--P(屬性: properties)名稱空間 , 屬性依然要設定set方法--> <bean id="user" class="com.dingcd.pojo.User" p:name="達達" p:age="18"/>
2、c 名稱空間注入 : 需要在標頭檔案中加入約束檔案
匯入約束 : xmlns:c="http://www.springframework.org/schema/c" <!--C(構造: Constructor)名稱空間 , 屬性依然要設定set方法--> <bean id="user" class="com.dingcd.pojo.User" c:name="達達" c:age="18"/>
發現問題:爆紅了,剛才我們沒有寫有參構造!
解決:把有參構造器加上,這裡也能知道,c 就是所謂的構造器注入!
測試程式碼:
@Test public void test02(){ ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); User user = context.getBean("user",User.class); System.out.println(user); }