博客
关于我
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/

    你可能感兴趣的文章
    Python 多处理如何优雅地退出?
    查看>>
    Python 多处理将子进程的标准输出重定向到 Tkinter 文本
    查看>>
    Python 多处理库错误(AttributeError:__exit__)
    查看>>
    Python 多处理模块的 .join() 方法到底在做什么?
    查看>>
    python 多线程与GIL
    查看>>
    python 字符串中特定字符替换,截取
    查看>>
    Python 字符串总结
    查看>>
    python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
    查看>>
    Python 字符串的几种拼装方式
    查看>>
    python 存入数据库bigint_python基础_MySQL的bigint类型
    查看>>
    python 学习 面向对象编程
    查看>>
    Python 学习日记第三篇 -- 字典
    查看>>
    Python 学习笔记(一)Data type
    查看>>
    python 安装echarts
    查看>>
    python 安装opencv及问题解决
    查看>>
    Python 安装程序:“写入文件 C:\Python27\pythonw.exe 时出错“
    查看>>
    Python 安装避坑指南:从入门到进阶
    查看>>
    Python 安装配置详解
    查看>>
    Python 常见的错误类型和继承关系
    查看>>
    python 常量_零基础学Python系列之一:Python的变量与常量
    查看>>