• byName自动装配和byType自动装配


    给对象的属性赋值的方式不再是手动的,由容器自动赋值

    下面先演示手动注入,然后再介绍自动注入

    手动注入:

    先创建两个类,一个Cat类,一个Dog类

    1. public class Cat
    2. {
    3.     public  void  shout()
    4.     {
    5.         System.out.println("miao~");
    6.     }
    7. }
    8. public class Dog
    9. {
    10.     public  void  shout()
    11.     {
    12.         System.out.println("wang~");
    13.     }
    14. }


    然后创建一个People类,上面两个类的对象都是这个类的属性,表示一个人养了一只猫和一只狗

    1. public class People
    2. {
    3.     private Cat cat;
    4.     private Dog dog;
    5.     private String name;
    6.  
    7.     public Cat getCat() {
    8.         return cat;
    9.     }
    10.  
    11.     public void setCat(Cat cat) {
    12.         this.cat = cat;
    13.     }
    14.  
    15.     public Dog getDog() {
    16.         return dog;
    17.     }
    18.  
    19.     public void setDog(Dog dog) {
    20.         this.dog = dog;
    21.     }
    22.  
    23.     public String getName() {
    24.         return name;
    25.     }
    26.  
    27.     public void setName(String name) {
    28.         this.name = name;
    29.     }
    30. }

    web.xml文件里面:

    1. //new一个Cat类的对象cat1    
    2. <bean id="cat1"  class="com.kuang.pojo.Cat"/>
    3.  
    4. //new一个Dog类的对象dog1
    5. <bean id="dog1"  class="com.kuang.pojo.Dog"/>
    6.  
    7.  
    8. //new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
    9. <bean id="people1"  class="com.kuang.pojo.People">
    10.      <property name="name"  value="欧阳水鸣"/>
    11.      <property name="cat"   ref="cat1"/>
    12.      <property name="dog"  ref="dog1"/>
    13. bean>

    自动装配
    1.byName自动装配:

    People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
    容器会遍历容器里面每一个对象的id,如果这个对象的id是Dog类的首字母小写dog,Cat类的首字母cat,就把这个对象赋值给people1的两个属性

    但是你如果id叫dog111,或者cat2,这样是识别不出来的,无法赋值成功,id只能是类的名字首字母小写,这是严格规定的

    1. //new一个Cat类的对象cat1    
    2. <bean id="cat"  class="com.kuang.pojo.Cat"/>
    3.  
    4. //new一个Dog类的对象dog1
    5. <bean id="dog"  class="com.kuang.pojo.Dog"/>
    6.  
    7.  
    8. //new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
    9. <bean id="people1"  class="com.kuang.pojo.People"  autowire="byName">
    10.      <property name="name"  value="欧阳水鸣"/>
    11. bean>


    2.byType自动装配

    People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
    容器会遍历容器里面每一个对象,查询这个对象所属的类,如果这个对象所属的类是Dog类,或者是Cat类,就把这个对象赋值给people1的两个属性

    所以不管容器内bean的id叫什么,只要它是Dog类的对象和Cat类的对象,就能赋值成功

    所以这要求在容器内,一个类只能有一个对象,不能一个类new出多个对象,要不然不知道赋哪个值

    1. //new一个Cat类的对象cat1    
    2. <bean id="cat333"  class="com.kuang.pojo.Cat"/>
    3.  
    4. //new一个Dog类的对象dog1
    5. <bean id="dog123"  class="com.kuang.pojo.Dog"/>
    6.  
    7.  
    8. //new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
    9. <bean id="people1"  class="com.kuang.pojo.People"  autowire="byType">
    10.      <property name="name"  value="欧阳水鸣"/>
    11. bean>

    3.Autowired自动装配

    beans.xml文件中非常简洁:

    1. "cat" class="com.kuang.pojo.Cat"/>
    2. "dog" class="com.kuang.pojo.Dog"/>
    3. "people" class="com.kuang.pojo.People"/>

    在People类中加两个注解即可 :

    1. public class People
    2. {
    3. @Autowired
    4. private Cat cat;
    5. @Autowired
    6. private Dog dog;
    7. private String name;
    8. public Cat getCat() {
    9. return cat;
    10. }
    11. public void setCat(Cat cat) {
    12. this.cat = cat;
    13. }
    14. public Dog getDog() {
    15. return dog;
    16. }
    17. public void setDog(Dog dog) {
    18. this.dog = dog;
    19. }
    20. public String getName() {
    21. return name;
    22. }
    23. public void setName(String name) {
    24. this.name = name;
    25. }
    26. }

    注意:Autowired可以和Qualifier连起来用:指定一个bean对象注入

    1. <bean id="cat1111" class="com.kuang.pojo.Cat"/>
    2. <bean id="cat2222" class="com.kuang.pojo.Cat"/>
    3. <bean id="cat2222" class="com.kuang.pojo.Cat"/>
    4. <bean id="dog123" class="com.kuang.pojo.Dog"/>
    5. <bean id="people" class="com.kuang.pojo.People"/>
    1. public class People
    2. {
    3. @Autowired
    4. @Qualifier(value="cat1111")
    5. private Cat cat;
    6. @Autowired
    7. private Dog dog;
    8. private String name;
    9. public Cat getCat() {
    10. return cat;
    11. }
    12. public void setCat(Cat cat) {
    13. this.cat = cat;
    14. }
    15. public Dog getDog() {
    16. return dog;
    17. }
    18. public void setDog(Dog dog) {
    19. this.dog = dog;
    20. }
    21. public String getName() {
    22. return name;
    23. }
    24. public void setName(String name) {
    25. this.name = name;
    26. }
    27. }

    Autowired和Resource两个注解的区别:

  • 相关阅读:
    Activity版本MVVM入门
    蓝桥杯官网练习题(算式900)
    二、基础算法精讲:二分
    C#中Linq AsEnumeralbe、DefaultEmpty和Empty的使用
    javaee SpringMVC 乱码问题解决
    短视频创作有什么建议吗?如何能更好地吸引用户呢?
    struct结构体【C#】
    10.VueCLI和Vite
    前端框架Vue学习 ——(七)Vue路由(Vue Router)
    Spring拓展知识:后置处理器与事件监听器
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/126647584