依赖注入: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}]