Java框架 Spring (三)DI:依赖注入

前言

属性赋值有两种方式:构造方法、访问器;光靠构造方法赋值,在实际应用中远远不够,所以使用访问器赋值。

DI:Dependency Injection,依赖注入。将相互依赖的对象分离,在Spring的配置(注解)中描述它们之间的依赖关系,这些依赖关系也只在使用时才被建立。

AOP(面向切面变成)是方法论,DI是具体手段。

 “访问器”赋值

      例子:狗与主人   涉及到基本类型、String类型、自定义类型、数组类型、三种集合的setter赋值

创建狗类与主人类
不需要Getter方法,但是需要Setter方法

//Dog类
public class Dog {
	public Dog() {
		System.out.println("---Dog():无参构造方法---" + getClass());
	}

	private String name;
	private String alias;
	private int age;
	private DogMst master;
	private Object[] objects;
	private List favList;
	private Set favSet;
	private Map favMap;

	public void setName(String name) {
		this.name = name;
	}

	public void setAlias(String alias) {
		this.alias = alias;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void setMaster(DogMst master) {
		this.master = master;
	}

	public void setObjects(Object[] objects) {
		this.objects = objects;
	}

	public void setFavList(List favList) {
		this.favList = favList;
	}

	public void setFavSet(Set favSet) {
		this.favSet = favSet;
	}

	public void setFavMap(Map favMap) {
		this.favMap = favMap;
	}

	@Override
	public String toString() {
		return "Dog [name=" + name + ", alias=" + alias + ", age=" + age + ", master=" + master + ", objects="
				+ Arrays.toString(objects) + ", favList=" + favList + ", favSet=" + favSet + ", favMap=" + favMap + "]";
	}

}

//主人类
public class DogMst {
	public DogMst() {
		System.out.println("---DogMst()" + this.getClass());
	}

	private String name;

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "DogMst [name=" + name + "]";
	}
}

配置文件

<bean id="dog" class="club.laobainb1314.p05.Dog" scope="prototype">
	<!-- String -->
	<property name="name" value="擎天柱"></property>
	<property name="alias" value="哈士奇" />
	<!-- 整形 -->
	<property name="age">
		<value>2</value>
	</property>
	
	<property name="master">
		<ref bean="idMaster"/>
	</property>
	
	<!-- 数组(List):用的Object类型 -->
	<property name="objects">
		<list>
			<value>"Object数组"</value>
			<value>2</value>
			<ref bean="idMaster"/>
		</list>
	</property>

	<!-- 狗有三好:骨头,飞盘,睡懒觉 -->
	<!-- List -->
	<property name="favList">
		<list>
			<value>啃骨头</value>
			<value>咬飞盘</value>
			<value>睡觉</value>
		</list>
	</property>

	<!-- Set -->
	<property name="favSet">
		<set>
			<value>啃骨头</value>
			<value>咬飞盘</value>
			<value>睡觉</value>
		</set>
	</property>

	<!-- Map -->
	<property name="favMap">
		<map>
			<entry key="1" value="吃屎" />
			<entry key="2" value="吃屎" />
			<entry key="3" value="吃屎" />
		</map>
	</property>
</bean>
	
<bean id="idMaster" class="club.laobainb1314.p05.DogMst">
	<property name="name" value="老白"></property>
</bean>

测试

 总结

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring容器来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入

发布了35 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34181343/article/details/92798240