博客
关于我
Spring学习笔记(四)——自动装配
阅读量:804 次
发布时间:2019-03-25

本文共 1799 字,大约阅读时间需要 5 分钟。

什么是自动装配?

自动装配是Spring框架用于满足JavaBean依赖的强大功能之一。Spring容器会自动查找并注入与当前Bean关联的其他Bean属性,从而简化依赖管理。在Spring中,实现自动装配的方式主要有两种:通过XML文件和通过注解。

传统的手动装配方式

在早期版本的Spring中,我们需要手动配置Bean及其依赖关系。以下是一个典型的例子:

这样,People bean的cat和dog属性会被手动注入。然而,这种方式存在灵活性不足的问题,且操作复杂。

通过XML文件实现自动装配

为了实现自动装配,可以在Bean的配置中设置autowire属性:

  • autowire="byName"
  • 这种方式是通过属性名进行自动注入。Spring会根据属性名(去掉首字母并转成小写)来查找对应的Bean。例如:

    < bean id="people" class="People" autowire="byName">    < property name="name" value="周杰伦" />    < property name="age" value="18" />
    1. autowire="byType"
    2. 通过类型进行自动注入。此方式需要确保同一类型的Bean在容器中是唯一的。例如:

      < bean id="people" class="People" autowire="byType">    < property name="name" value="周杰伦" />    < property name="age" value="18" />

      注意:通过byType方式时,若同一个类的Bean不唯一,会抛出“单一和唯一”的错误。

      通过注解实现自动装配

      使用注解法可以显著简化配置。在People类中添加反转义:

      public class People {    private String name;    private int age;    private Cat cat;    private Dog dog;    @Autowired    public void setCat(Cat cat) {        this.cat = cat;    }    @Autowired    public void setDog(Dog dog) {        this.dog = dog;    }}

      注解的灵活性

      • @Autowired:

        • 通过类型和名称同时查找Bean。
        • 默认按类型查找,若不找到按名称查找。
        • @Autowired可以作用于属性或对应的set方法。
      • @Qualifier:

        • 用于指定需要注入的特定Bean的id。
        • 通常与@Autowired配合使用。
      • @Resource:

        • 前eliminar通过名称查找,失败后通过类型查找。
        • 属于更高级的注解,主要用于特定场景。

      @Autowired和@Resource的区别:

      • @Autowired先按类型再按名称查找。
      • @Resource先按名称再按类型查找。
      • @Autowired和@Resource都可用于属性或set方法。
      • @Qualifier可以与@Autowired一起用于指定Bean的id。

      如何使用注解?

    3. 修改Cat类:
    4. public class Cat {    private String name;    public void setName(String name) {        this.name = name;    }    public void shout() {        System.out.println("猫叫喵喵喵~");    }}
      1. 修改配置文件:
      2. 确保Cat bean在容器中存在,并通过注解注入。

        总结

        • 通过XML文件实现自动装配支持两种方式:byName和byType。
        • 使用注解实现自动装配更加灵活,支持细粒度配置。
        • Autowired是首选,@Resource适合特定场景。
        • 两种方式的核心目标都是简化依赖管理,提高开发效率。

    转载地址:http://ueayk.baihongyu.com/

    你可能感兴趣的文章
    Python3-如何自我更新作为服务运行的应用程序
    查看>>
    Python3.1-网格模拟概念性问题
    查看>>
    Python3.12 解决conda环境libstdc++版本过低问题
    查看>>
    python3.2批量查询IP地址区域
    查看>>
    Python3.5中协程和未来/任务之间的区别?
    查看>>
    python3.5实现socket通讯(TCP)
    查看>>
    python3.6 ubuntu部署nginx、 uwsgi、 django
    查看>>
    Python3.6.3中,functools似乎不能用
    查看>>
    python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
    查看>>
    python3.6使用pickle序列化class
    查看>>
    python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
    查看>>
    Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
    查看>>
    python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
    查看>>
    Python3.7安装cv2踩过的坑
    查看>>
    python写txt文件
    查看>>
    python关于sorted排序函数详细解析 附实战代码(全)
    查看>>
    python3.8调用m文件,调用matlab
    查看>>
    python3.9新特性_Python 3.9 新特性速览
    查看>>
    Python3.x:遍历select下拉框获取value值
    查看>>
    python360百科_11月编程排行榜:Python超过Java成第二
    查看>>