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

    你可能感兴趣的文章
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>