Spring之DI,DI的定义:依赖注入,给对象的属性赋值。依赖注入有两种方式,第一种方式:通过构造器(结合构造方法);第二种方式:通过set方法。
第二种方式实现依赖注入,即通过set方法。需要添加Person.java类文件,一共是6个文件来讲解这个通过set方法实现对象属性的赋值。
1、applicationContext.xml(主配置文件)
2、applicationContext-di.xml(局部配置文件)
3、Penguin.java
4、Master.java(饲养员的类文件)
5、Window.java
6、Person.java
1、applicationContext.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">
<!-- <import resource="cn/java/ioc1/applicationContext-ioc.xml"/> -->
<!-- <import resource="cn/java/singleton2/applicationContext-singleton.xml"/> -->
<!-- <import resource="cn/java/lazy3/applicationContext-lazy.xml"/> -->
<!-- <import resource="cn/java/intAndDestroy4/applicationContext-initAndDestroy.xml"/> -->
<import resource="cn/java/di5/applicationContext-di.xml"/>
</beans>
2、applicationContext-di.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="master" class="cn.java.di5.Master">
<constructor-arg index="0" type="java.lang.String" value="张三"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="男"></constructor-arg>
</bean>
<!-- 通过构造器来注入 -->
<bean id="penguin" class="cn.java.di5.Penguin" >
<constructor-arg index="0" type="java.lang.String" value="Q仔"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="Q妹"></constructor-arg>
<constructor-arg index="2" type="java.lang.Integer" value="2"></constructor-arg>
<constructor-arg index="3" type="cn.java.di5.Master" ref="master"></constructor-arg>
</bean>
<!-- 通过set方式注入 -->
<bean id="person" class="cn.java.di5.Person">
<property name="personName" value="王二麻子"></property>
<property name="age" value="12"></property>
<property name="list">
<list>
<value>list集合1</value>
<value>list集合2</value>
<value>20</value>
<value>3.14</value>
<ref bean="master"/>
</list>
</property>
<property name="set">
<set>
<value>set集合1</value>
<value>2.14</value>
<ref bean="master"/>
</set>
</property>
<property name="map">
<map>
<entry key="1" value="王二麻子"></entry>
<entry key="2" value="李四'"></entry>
<entry key-ref="master" value-ref="penguin"></entry>
</map>
</property>
</bean>
</beans>
3、Penguin.java
package cn.java.di5;
public class Penguin {
private String name;
private String gender;
private Integer age;
private Master master;
public Penguin() {
super();
System.out.println("Penguin...无参构造");
}
public Penguin(String name, String gender, Integer age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
System.out.println("Penguin....有参构造方法1");
}
public Penguin(Integer age,String name, String gender) {
super();
this.name = name;
this.gender = gender;
this.age = age;
System.out.println("Penguin....有参构造方法2");
}
public Penguin(String name, String gender, Integer age, Master master) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.master = master;
}
@Override
public String toString() {
return "Penguin [name=" + name + ", gender=" + gender + ", age=" + age + ", master=" + master + "]";
}
}
4、Master.java(饲养员的类文件)
package cn.java.di5;
/*主人*/
public class Master {
private String masterName;//主人的姓名
private String gender;//主人的性别
public Master() {
super();
// TODO Auto-generated constructor stub
}
public Master(String masterName, String gender) {
super();
this.masterName = masterName;
this.gender = gender;
}
@Override
public String toString() {
return "Master [masterName=" + masterName + ", gender=" + gender + "]";
}
}
5、Window.java
package cn.java.di5;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Window {
public static void main(String[] args){
/*//1、可以通过有参构造方法给对象属性赋值 调用输出
Penguin p1=new Penguin("Q仔", "公", 2);
//2、通过set方法给对象的属性赋值 */
/*ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Penguin p1=(Penguin)context.getBean("penguin");
System.out.println(p1);*/
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Person p1=(Person)context.getBean("person");
System.out.println(p1);
}
}
6、Person.java
package cn.java.di5;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Person {
private String personName;
private Integer age;
private List list;
private Set set;
private Map map;
public Person() {
System.out.println("Person...无参构造方法");
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Set getSet() {
return set;
}
public void setSet(Set set) {
this.set = set;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
@Override
public String toString() {
return "Person [personName=" + personName + ", age=" + age + ", list=" + list + ", set=" + set + ", map=" + map
+ "]";
}
}