Spring學習筆記-DI(依賴注入)
阿新 • • 發佈:2021-08-10
構造器注入(見前貼)
Set注入【重點】
- 依賴注入:Set注入
-
- 依賴:bean物件的建立依賴於容器
-
- 注入:bean物件的所有屬性由容器來注入
【環境搭建】
- 複雜型別
// Class Address package cn.iris.pojo; /** * @author Iris 2021/8/10 */ public class Address { private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
- 真實測試物件
// Class Student package cn.iris.pojo; import java.util.*; /** * @author Iris 2021/8/10 */ public class Student { private String name; private Address address; private String[] books; private List<String> hobbies; private Map<String, String> friends; private Set<String> games; private Properties info; private String lady3; }
- applicationContext.xml
//applicationContext.xml(略) 【官網Copy||IDEA直接建立】 --- 注入部分 --- <bean class="cn.iris.pojo.Student" id="student"> <!--普通型別注入,value--> <property name="name" value="iris"/> <!--bean注入,ref--> <property name="address" ref="address"/> <!--陣列--> <property name="books"> <array> <value>King</value> <value>Queen</value> </array> </property> <!--list--> <property name="hobbies"> <list> <value>Basketball</value> <value>ComputerGames</value> </list> </property> <!--map--> <property name="friends"> <map> <entry key="GF" value="Molly"/> </map> </property> <property name="games"> <set> <value>GTAV</value> <value>LOL</value> <value>CS:GO</value> </set> </property> <!--null--> <property name="lady3"> <null/> </property> <!--property--> <property name="info"> <props> <prop key="SID">201931771338</prop> <prop key="Class">3</prop> <prop key="driver">abaaba</prop> <prop key="url">ip:port/abc</prop> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property> </bean>
- 測試類
public class MyTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = (Student) context.getBean("student");
System.out.println(student.getName());
}
}
拓展方式注入
官方解釋
p名稱空間注入(p-namespace)【對應Set注入】
<!--p名稱空間注入,可直接注入屬性的值-->
<bean id="user" class="cn.iris.pojo.User" p:name="iris" p:age="19"/>
c名稱空間注入(c-namespace)【對應Constructor-arg注入】
<!--c名稱空間注入,構造器注入-->
<bean id="user2" class="cn.iris.pojo.User" c:age="19" c:name="iris"/>
測試
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = context.getBean("user", User.class);
System.out.println(user);
User user2 = context.getBean("user2", User.class);
System.out.println(user2);
}
注意點
- p命名與c命名不能直接使用,需要匯入【xml約束】
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"