- 自动装配是Spring满足bean依赖一种方式!
- Spring会在上下文中自动寻找,并自动给bean装配属性!
在Spring中有三种自动装配的方式
1.在xml中显示配置
2.在java中显示配置
3.隐式的自动装配bean
测试
一个人有两个宠物
package com.jialidun.pojo;
public class Cat{
public void shout(){
System.out.println("喵~");
}
}
package com.jialidun.pojo;
public class Dog{
public void shout(){
System.out.println("汪~");
}
}
package com.jialidun.pojo;
@Data //lombok
public class People{
private Cat cat;
private Dog dog;
private String name;
}
创建beans.xml
<bean id="cat" class="com.jialidun.pojo.Cat"/>
<bean id="dog" class="com.jialidun.pojo.Dog"/>
<bean id="people" class="com.jialidun.pojo.People">
<property name="name" value="雷伊"/>
<property name="dog" ref="dog"/>
<property name="cat" ref="cat"/>
</bean>
@Test
public void test01(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
People people = context.getBean("people",People.class);
people.getDog().shout();
people.getCat().shout();
}
1.2、ByName自动装配
<bean id="cat" class="com.jialidun.pojo.Cat"/>
<bean id="dog" class="com.jialidun.pojo.Dog"/>
<!--
byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanId!
byName必须要与set后面的值相对应,否则注入失败!
-->
<bean id="people" class="com.jialidun.pojo.People" autowire="byName">
<property name="name" value="雷伊"/>
</bean>
1.3、byType自动装配
<bean id="cat" class="com.jialidun.pojo.Cat"/>
<bean id="dog" class="com.jialidun.pojo.Dog"/>
<!--
byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!
使用byType,这个类型必须全局唯一,否则注入失败!
-->
<bean id="people" class="com.jialidun.pojo.People" autowire="byType">
<property name="name" value="雷伊"/>
</bean>
小结
- byName的时候,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法后面的值一致!
- byType的时候,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致!