Spring依赖注入DI的四种方式

1.setter注入,(属性注入)
使用setter注入:
1,使用bean元素的子元素设置;
2,简单类型值,直接使用value赋值;
3,引用类型,使用ref赋值;
4,集合类型,直接使用对应的集合类型元素即可。
5,spring通过属性的setter方法注入值;
6,在配置文件中配置的值都是string,spring可以自动的完成类型的转换

------------------------员工类-------------------------
public class Employee {
	private Integer age;
	private String name;
	private Department dept;
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Department getDept() {
		return dept;
	}
	public void setDept(Department dept) {
		this.dept = dept;
	}
	@Override
	public String toString() {
		return "Employee [age=" + age + ", name=" + name + ", dept=" + dept + "]";
	}
}
------------------------部门类-------------------------
public class Department {
	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
--------------------------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.xsd">
	
	<!-- 员工 -->
	<bean id="employee" class="com.ywq.spring.pojo.Employee" >
		<!-- setter方法注入: 属性注入 
			<property name="" value="">
			name : 属性名称
			value : 基本数据类型+String类型的值注入
			ref : 引用类型(对象类型)的注入
			value 和ref 只能二选一
		-->
		<property name="age" value="18"></property>
		<property name="name" value="jinken"></property>
		<property name="dept" ref="dept"></property>
	</bean>
	<!-- 部门 -->
	<bean id="dept" class="com.ywq.spring.pojo.Department" ></bean>

</beans>

2构造器注入
1,默认情况下,constructor-arg的顺序就是构造器参数的顺序
2,3中调整构造器顺序:
1.index:在构造器中的参数索引(从0开始)
2.type:在构造器中的参数的类型
3.name:在构造器中按照构造器的参数名字设置值

使用哪种注入方式比较好(setter?构造器?)?
1,如果一个类必须依赖另一个类才能正常运行,用构造器;
2,但是构造器的参数如果过多,构造器很难看;–测试参数不能少,否则报错20191221
3,更多的还是使用setter注入;
4,可以使用@Required标签来要求一个属性必须注入

--------------构造器注入xml配置-----------------
<!-- 员工 -->
	<bean id="employee" class="com.ywq.spring.pojo.Employee" >
		<!-- constructor注入 -->
		<constructor-arg index="1"  value="乔峰"/>
		<constructor-arg index="0" value="19"/>
		<constructor-arg  ref="dept"/>
	</bean>
	<!-- 部门 -->
	<bean id="dept" class="com.ywq.spring.pojo.Department" ></bean>

3.p命名空间注入
使用p命名空间注入先在约束上面引入 p标签

--------------p命名空间注入xml配置-----------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
    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.xsd">
        
 	<!-- 配置部门 -->
 	<bean id="department" class="com.ywq.spring.pojo.Department" 
 	p:id="123"
 	p:name="销售部"/>
 	
 	<!-- 配置员工 -->
 	<bean id="emp" class="com.ywq.spring.pojo.Employee" 
 	p:id="111"
 	p:name="西门吹雪"
 	p:dept-ref="department"/>
</beans>

4.集合类型值注入
在处理的数据中,
有标量/值类型=基础数据类型以及包装类+String – value属性
也有Spring容器里面的对象 --ref属性
还要很多数据JDK内置的数据结构:
1.键值对 Map 、Properties
2.数组
3.集合Set、List

----------------Bean-------------------
public class CollectionBean {
	private Set<String> set;
	private List<String> list;
	private String[] array;
	private Map<String, String> map;
	private Properties prop; //读取本地 xxx.properties文件(本质就是一个Map集合)
}
------------------xml配置文件-----------------
<bean id="collectionBean" class="cn.gzxst.spring.pojo.CollectionBean">
		<!-- set集合注入  -->
		<property name="set">
			<set>
				<value>set1</value>	
				<value>set2</value>	
				<value>set3</value>	
			</set>
		</property>
		<!-- list集合注入  -->
		<property name="list">
			<list>
				<value>list1</value>
				<value>list2</value>
				<value>list3</value>
			</list>
		</property>
		<!-- 数组注入 -->
		<property name="array">
			<array>
				<value>AA</value>
				<value>BB</value>
				<value>CC</value>
			</array>
		</property>
		<!-- map集合注入 -->
		<property name="map">
			<map>
				<entry key="key1" value="乔峰"/>
				<entry key="key2" value="虚竹"/>
				<entry key="key3" value="段誉"/>
			</map>
		</property>
		<!-- Properties注入 -->
		<property name="prop">
			<props>
				<prop key="pro1">proVlaue1</prop>
				<prop key="pro2">proVlaue2</prop>
				<prop key="pro3">proVlaue3</prop>
			</props>
		</property>
	</bean>

你可能感兴趣的:(笔记)