Bean自动装配

简介: spring IoC容器可以自动装配(autowire)来协作bean之间的相互联系。 autowire一共有五种类型。由于autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设置,这样可以减少我们的配置文件。no 不采用自动装配byName 根据属

spring IoC容器可以自动装配(autowire)来协作bean之间的相互联系。
autowire一共有五种类型。由于autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的方便之处在减少或者消除属性或构造器参数的设置,这样可以减少我们的配置文件。

no
不采用自动装配

byName
根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。
例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。

byType
如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check=”objects”让Spring抛出异常。

constructor
与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

autodetect
通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

注意:

  • 如果直接使用property和constructor-arg注入依赖的话,那么将总是覆盖自动装配。

  • 目前不支持简单类型(基本类型、String、Class以及简单类型的数组)的自动装配。

  • byType和constructor自动装配模式也可用于数组和指定类型的集合。在这种情况下容器中的所有匹配的自动装配对象将被用于满足各种依赖。

  • 自动装配还可以与依赖检查结合使用,这样依赖检查将在自动装配完成之后被执行。

自动装配的优点:

  • 自动装配能显著减少配置的数量。

  • 自动装配可以使配置与java代码同步更新。因此强烈推荐在开发过程中采用自动装配,而在系统趋于稳定的时候改为显式装配的方式。

自动装配的缺点:

  • 装配不明确可能出现难以预料的结果,而且Spring所管理的对象之间的关联关系也不再能清晰的进行文档化。

  • 对于那些根据Spring配置文件生成文档的工具来说,自动装配将会使这些工具没法生成依赖信息。

  • 当根据类型进行自动装配的时候,容器中可能存在多个bean定义跟自动装配的setter方法和构造器参数类型匹配。如果bean定义不唯一,装配时就会抛出异常,面对这种场景我们有几个方案进行选择:

    • 第一个方案就是弃自动装配而改用显式装配;
    • 第二个方案就是在bean定义中通过设置’autowire-candidate’属性为’false’来将该bean排除在自动装配候选名单之外;
    • 第三个方案是通过在bean定义中设置’primary’属性为’true’来将该bean设置为首选自动装配bean。最后,对于使用Java 5的用户来说,可能会使用注解的形式来配置bean。
目录
相关文章
|
8月前
|
人工智能 搜索推荐
AI视频技术的发展是否会影响原创内容的价值
AI视频技术的发展显著降低了视频制作的门槛与成本,自动完成剪辑、特效添加等繁琐工作,大大缩短创作时间。它提供个性化创意建议,帮助创作者突破传统思维,拓展创意边界。此外,AI技术使更多非专业人士也能参与视频创作,注入新活力与多样性,丰富了原创内容。总体而言,AI视频技术不仅提升了创作效率,还促进了视频内容的创新与多样化。
|
缓存 Python
[译]Python 和 TOML:新最好的朋友 (2) 使用Python操作TOML
[译]Python 和 TOML:新最好的朋友 (2) 使用Python操作TOML
476 1
|
运维 监控 Cloud Native
从故障演练到运维工具产品力评测的探索 | 龙蜥技术
随着AI和云原生技术的发展,业界运维工具百花齐放,该如何让优秀的工具脱颖而出?
|
资源调度 并行计算
马尔可夫区制转移模型Markov regime switching
马尔可夫区制转移模型Markov regime switching
|
人工智能 架构师 大数据
深耕数字经济,加速数实融合:阿里云的浙江合作伙伴们
2023年2月8日,阿里云2022浙江合作伙伴年会在杭州顺利召开。
|
人工智能 Go
神级插件Bito介绍及使用
神级插件Bito介绍及使用
|
物联网
《阿里云IoT物联网市场暨合作伙伴计划发布》电子版地址
阿里云IoT物联网市场暨合作伙伴计划发布
287 2
《阿里云IoT物联网市场暨合作伙伴计划发布》电子版地址
|
定位技术
高分、环境等国产遥感卫星影像的获取方法
本文介绍高分(GF)与环境(HJ)等主要国产卫星遥感数据的免费下载(包括批量下载)方法~
1007 2
高分、环境等国产遥感卫星影像的获取方法
|
设计模式 SQL Oracle
解读六边形架构
解读六边形架构
602 0
|
数据采集 存储 分布式计算
【门户网站】用户行为数据采集技术实现
【门户网站】用户行为数据采集技术实现
484 0