前言
属性赋值有两种方式:构造方法、访问器;光靠构造方法赋值,在实际应用中远远不够,所以使用访问器赋值。
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容器来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入