给对象的属性赋值的方式不再是手动的,由容器自动赋值
下面先演示手动注入,然后再介绍自动注入
手动注入:
先创建两个类,一个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文件中非常简洁:
-
"cat" class="com.kuang.pojo.Cat"/> -
-
"dog" class="com.kuang.pojo.Dog"/> -
-
-
"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两个注解的区别:
