依賴注入:DI(dependency import)給對象的屬性賦值java
第一種方法給對象屬性賦值:mysql
這樣在剛啓動spring框架時,就調用對象的有參構造而不是無參構造了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="test1" class="cn.java.ioc1.YelloMouseWolf" > <!-- constructor-arg:經過構造器給對象賦值,調用有參構造 index:方法中第幾個屬性 type:這個屬性的類型 value:要給這個屬性賦值的內容 --> <constructor-arg index="0" type="java.lang.String" value="tom"></constructor-arg> <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg> <constructor-arg index="2" type="java.lang.Float" value="2.5"></constructor-arg> </bean> </beans>
第二種方法賦值:sql
經過setter getter。開啓框架調用的是無參構造。oracle
<?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="test1" class="cn.java.ioc1.YelloMouseWolf" > <!-- property:經過setter getter賦值(開啓框架會調用無參構造) name:屬性名 value:屬性的值 --> <property name="name" value="jack"></property> <property name="age" value="10"></property> <property name="weight" value="2.5"></property> </bean> </beans>
總結:什麼是DI?框架
DI是依賴注入,給對象賦值。有兩種方法賦值。url
一種是利用構造器,啓動框架會調用有參構造。spa
一種是利用set get賦值,啓動框架會調用無參構造。code
經過DI中的get/set方式給對象的list、set、map、properties(xxx.properties的配置文件)屬性賦值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-2.5.xsd"> <bean id="pandaXML" class="cn.java.ioc1.Panda" > <property name="name" value="熊貓"></property> <property name="age" value="20"></property> </bean> <!-- 普通的屬性正常賦值 name的類型是String,但像pet這種屬性的類型是Panda,那就要在panda的xml先把屬性值配置好。而後用ref引用那個xml(自定義類型的屬性賦值用ref) List類型的賦值要新寫一個<list>標籤而後用<value>標籤寫內容,內容默認爲String類型。也能夠用<ref />引入別的bean。 Set類型和List類型同樣 Map類型用<entry>標籤,內容是一個key和一個value。兩個值都爲Object類型 Properties類型用<props>,再用<prop>標籤寫值 --> <bean id="person" class="cn.java.ioc1.Person" > <property name="name" value="張三"></property> <property name="pet" ref="pandaXML"></property> <property name="list" > <list> <value>list內容1</value> <value>list內容2</value> <ref bean="pandaXML"/> </list> </property> <property name="set"> <set> <value>set內容1</value> <value>set內容2</value> <ref bean="pandaXML"/> </set> </property> <property name="map"> <map> <entry key="姓名" value="李四"></entry> <entry key="年齡" value="10"></entry> </map> </property> <property name="props"> <props> <prop key="driver">com.mysql.jdbc.Driver</prop> <prop key="url">jdbc:oracle:@thin:localhost:1521:orcl</prop> </props> </property> </bean> </beans>
這時Person對象的內容是:
Person [name=張三, pet=Panda [name=熊貓, age=20], list=[list內容1, list內容2, Panda [name=熊貓, age=20]], set=[set內容1, set內容2, Panda [name=熊貓, age=20]], map={姓名=李四, 年齡=10}, props={url=jdbc:oracle:@thin:localhost:1521:orcl, driver=com.mysql.jdbc.Driver}]