控制反轉(Inversion of Control)和依賴注入(Dependency Injection)講的都是一個概念,只不過是站在了不同的角度,所謂的依賴注入:
依賴注入(DI)是指在運行期,由外部容器動態地將依賴對象注入到組件中。當spring容器啟動后,spring容器初始化,創建并管理bean對象,以及銷毀它。所以我們只需從容器直接獲取Bean對象就行,而不用編寫一句代碼來創建bean對象。這種現象就稱作控制反轉(Ioc),即應用本身不負責依賴對象的創建及維護,依賴對象的創建及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂反轉。
下面介紹各種類型屬性的注入方式:
新建實體類Student:
public class Student {//基本數據類型的變量private String name;//對象類型的變量,Address類代碼(只有一個屬性 private String addr() setter() getter())private Address address;//數組類型的變量private String[] hobby;//list類型的變量private List<String> books;//Map類型的變量private Map<String,String> cards;//set類型的變量private Set<String> movies;//Properties類型的變量private Properties info;public void show(){System.out.println("name:"+name+"地址:"+address.getAddr());System.out.println("愛好有:");for(int i=0;i<hobby.length;i++){System.out.println(hobby[i]);}System.out.println("喜歡的書籍:"+books);System.out.println("擁有的銀行卡"+cards);System.out.println("喜歡的電影"+movies);System.out.println("身份信息:"+info);} //set方法省略 }
配置文件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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="address" class="com.wang.entity.Address"><property name="addr" value="青島"></property></bean> <bean id="student" class="com.wang.entity.Student"><!--配置基本數據類型 --><property name="name" value="張三豐"></property><!--配置對象類型 --><property name="address" ref="address"></property><!--配置數組類型 --><property name="hobby" ><array><value>吃飯</value><value>睡覺</value><value>打豆豆</value></array></property><!--配置list類型 --><property name="books"><list><value>時光旅行者的妻子</value><value>白發魔女傳</value><value>誰的青春不迷茫</value></list></property><!--配置map類型 --><property name="cards"><map><entry key="農行卡" value="62284832128534"></entry><entry key="建行卡" value="62284867867984"></entry></map></property><!--配置set類型 --><property name="movies"><set><value>瘋狂動物城</value><value>葉問3</value><value>功夫熊貓</value></set></property>
<!--配置properties類型-->
<property name="info"><props><prop key="學號">20124280</prop><prop key="班級">三年二班</prop><prop key="性別">不詳</prop></props></property></bean> </beans>
測試代碼:
@Testpublic void test1(){ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");Student s=(Student)context.getBean(Student.class);s.show();}
打印結果:
name:張三豐地址:青島
愛好有:
吃飯
睡覺
打豆豆
喜歡的書籍:[時光旅行者的妻子, 白發魔女傳, 誰的青春不迷茫]
擁有的銀行卡{農行卡=62284832128534, 建行卡=62284867867984}
喜歡的電影[瘋狂動物城, 葉問3, 功夫熊貓]
身份信息:{學號=20124280, 性別=不詳, 班級=三年二班}