给对象的属性赋值的方式不再是手动的,由容器自动赋值
下面先演示手动注入,然后再介绍自动注入
手动注入:
先创建两个类,一个Cat类,一个Dog类
public class Cat
{
public void shout()
{
System.out.println("miao~");
}
}
public class Dog
{
public void shout()
{
System.out.println("wang~");
}
}
然后创建一个People类,上面两个类的对象都是这个类的属性,表示一个人养了一只猫和一只狗
public class People
{
private Cat cat;
private Dog dog;
private String name;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
web.xml文件里面:
//new一个Cat类的对象cat1
<bean id="cat1" class="com.kuang.pojo.Cat"/>
//new一个Dog类的对象dog1
<bean id="dog1" class="com.kuang.pojo.Dog"/>
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1" class="com.kuang.pojo.People">
<property name="name" value="欧阳水鸣"/>
<property name="cat" ref="cat1"/>
<property name="dog" ref="dog1"/>
</bean>
自动装配:
1.byName自动装配:
People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
容器会遍历容器里面每一个对象的id,如果这个对象的id是Dog类的首字母小写dog,Cat类的首字母cat,就把这个对象赋值给people1的两个属性
但是你如果id叫dog111,或者cat2,这样是识别不出来的,无法赋值成功,id只能是类的名字首字母小写,这是严格规定的
//new一个Cat类的对象cat1
<bean id="cat" class="com.kuang.pojo.Cat"/>
//new一个Dog类的对象dog1
<bean id="dog" class="com.kuang.pojo.Dog"/>
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1" class="com.kuang.pojo.People" autowire="byName">
<property name="name" value="欧阳水鸣"/>
</bean>
2.byType自动装配
People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
容器会遍历容器里面每一个对象,查询这个对象所属的类,如果这个对象所属的类是Dog类,或者是Cat类,就把这个对象赋值给people1的两个属性
所以不管容器内bean的id叫什么,只要它是Dog类的对象和Cat类的对象,就能赋值成功
所以这要求在容器内,一个类只能有一个对象,不能一个类new出多个对象,要不然不知道赋哪个值
//new一个Cat类的对象cat1
<bean id="cat333" class="com.kuang.pojo.Cat"/>
//new一个Dog类的对象dog1
<bean id="dog123" class="com.kuang.pojo.Dog"/>
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1" class="com.kuang.pojo.People" autowire="byType">
<property name="name" value="欧阳水鸣"/>
</bean>
3.Autowired自动装配
beans.xml文件中非常简洁:
<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="people" class="com.kuang.pojo.People"/>
在People类中加两个注解即可 :
public class People
{
@Autowired
private Cat cat;
@Autowired
private Dog dog;
private String name;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注意:Autowired可以和Qualifier连起来用:指定一个bean对象注入
<bean id="cat1111" class="com.kuang.pojo.Cat"/>
<bean id="cat2222" class="com.kuang.pojo.Cat"/>
<bean id="cat2222" class="com.kuang.pojo.Cat"/>
<bean id="dog123" class="com.kuang.pojo.Dog"/>
<bean id="people" class="com.kuang.pojo.People"/>
public class People
{
@Autowired
@Qualifier(value="cat1111")
private Cat cat;
@Autowired
private Dog dog;
private String name;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Autowired和Resource两个注解的区别: