Spring-IOC XML 配置多个相同 ID 的 bean 加载分析

我们现在仍以 xml 中配置 bean 的方式来 使用 Spring ,不考虑注解和扫包

配置相同id 的bean

定义一个 beanTransactionManager

/*** @author maple 2018.09.10 下午10:27*/
public class TransactionManager {private static int counter = 0;private String beanName;public void setBeanName(String beanName) {this.beanName = beanName;}public TransactionManager() {System.out.println("===========> ===========>  TransactionManager counter :" + (++counter));}public void hello() {System.out.println("===========> ===========>  hello world, counter is " + counter + ", name is " + beanName);}
}

TransactionManager 有一个静态变量 counter 可以判断该类被实例化了几次

Spring 管理 bean

<bean id="manager" class="com.hzways.multiply.TransactionManager"><property name="beanName" value="master"/>
</bean><bean id="manager" class="com.hzways.multiply.TransactionManager"><property name="beanName" value="master"/></bean>

照这种方式配置,spring 会直接报错,在同一个xml文件下,这样的配置是不允许的。

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 'manager' is already used in this <beans> element
Offending resource: URL [file:/Users/maple/developer/spring-learning/maple-spring/maple-ioc/target/classes/services3.xml]

甚至 idea 都会进行提示
idea提示

然而,我们有其他办法让Spring 能够去接纳 在 xml 中 配置 多个相同 的 bean 。

使用 import 的 方式 配置相同 id 的 bean

我们可以在 service.xml 中 配置 一个 bean ,并使用 import 的形式 导入另一个 spring 的xml 配置文件

service.xml

<bean id="manager" class="com.hzways.multiply.TransactionManager"><property name="beanName" value="master"/>
</bean><import resource="classpath*:services2.xml"/>

services2.xml

<bean id="manager" class="com.hzways.multiply.TransactionManager"><property name="beanName" value="slave"/>
</bean>

通过这样的配置后,Spring不会报错,启动主程序。

public class Main {public static void main(String[] args) throws InterruptedException {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:services3.xml");applicationContext.start();TransactionManager helloWorld = applicationContext.getBean(TransactionManager.class);helloWorld.hello();Thread.sleep(Long.MAX_VALUE);}
}

控制台打印如下:

===========> ===========>  TransactionManager counter :1
===========> ===========>  hello world, counter is 1, name is slave

分析控制台日志发现,TransactionManager 类 只被加载了一次,而且加载的是从 service2.xml 里面定义的bean

我们调换顺序,把 import 放在 bean 定义之上,再进行测试。

<import resource="classpath*:services3-bean.xml"/><bean id="manager" class="com.hzways.multiply.TransactionManager"><property name="beanName" value="master"/></bean>

这次程序果然打的是 master

===========> ===========>  TransactionManager counter :1
===========> ===========>  hello world, counter is 1, name is master

总结

spring不支持 直接在一个xml文件中定义两个相同id的bean,但是可以通过 import 的形式 在另外一个xml文件中定义相同 id 的bean。
如果多个xml中定义相同 的 bean id ,Spring 默认会以最后加载到的bean为准,进行加载。


转载于:https://www.cnblogs.com/leihuazhe/p/9680664.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

confd_confd + Nacos | 无代码侵入的配置变更管理

为什么要支持confd&#xff0c;老的应用配置管理模式是启动时读取配置文件&#xff0c;然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的&#xff0c;应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更。对于一些已经成熟的系统来说&#…

如何在Windows 8中更改登录屏幕的颜色

Nearly every component of Windows 8 can be customized to suit your needs, some settings however are buried deep into the registry. Windows 8的几乎每个组件都可以自定义以满足您的需求&#xff0c;但是某些设置却深埋在注册表中。 如何在Windows 8中更改登录屏幕的颜…

我看的书籍

UNIX Network Programming, Volume 1, Second Edition, by W.Richard Stevens. Cocoa Programming for Mac OS X, Third Edition, by Aron Hillegass. Beginning AppleScript, by Stephen G. Kochan. 转载于:https://www.cnblogs.com/IvanYang/archive/2010/11/11/1874610.html…

linux下mysql数据库操作命令

1&#xff1a;启动服务 service mysqld start (5.0版本是mysqld) service mysql start (5.5.7版本是mysql)2&#xff1a;停止服务 service mysqld stop3&#xff1a;重启服务 service mysqld restart service mysql restart (5.5.7版本命令)4&#xff1a;登陆 登陆本地主机 my…

js怎么获取一个元素与屏幕右边的距离_js中如何获取某个元素到浏览器最左和最右的距离...

js中如何获取某个元素到浏览器最左和最右的距离以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;js中获取某个元素到浏览器最左和最右的距离的程序代码是&#xff1a;<> //自行下载分页…

kindle阅读_如何在Kindle上清除最远的阅读页面

kindle阅读It’s really annoying when you’re trying to re-read an eBook and your Kindle or Kindle app keeps trying to get you to jump to the end because that’s the “Furthest Location Read.” Here’s how to fix it. 当您尝试重新阅读电子书并且Kindle或Kindle…

杜鹃演绎奢华春装大片

化妆/发型:老黑(老黑造型)化妆 /发型助理:全科班学员(老黑化妆造型艺术学校)这组片子是为《芭莎》杂志拍摄的,而且就刊登在本月的刊目里.每次看到自己的作品都感到有一丝的成就感,这也是我喜欢这份工作最直接的原因,哈哈!!话不多说了,一起欣赏大片吧!!化妆/发型:老黑(老黑造型)…

WPF 绘制对齐像素的清晰显示的线条

WPF 绘制对齐像素的清晰显示的线条 原文:WPF 绘制对齐像素的清晰显示的线条版权声明&#xff1a;本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布&#xff0c;但务必保留文章署名吕毅&#xff08;包含链接&#xff1a;h…

中输入learn_Scikit-learn新版本发布,一行代码秒升级

十三 发自 凹非寺 量子位 报道 | 公众号 QbitAIScikit-learn&#xff0c;这个强大的Python包&#xff0c;一直深受机器学习玩家青睐。而近日&#xff0c;scikit-learn 官方发布了 0.22 最终版本。此次的更新修复了许多旧版本的bug&#xff0c;同时发布了一些新功能。安装最新版…

禁用删除键退回历史记录_如何在Windows 8中删除或禁用搜索超级按钮历史记录

禁用删除键退回历史记录When you use the Search Charm in Windows 8 it remembers everything you search for, which is very useful, but if you share your PC with someone you may want to delete your history or even disable it. Here’s how to do it. 在Windows 8中…

Java8基础之super关键字

相信学过Java语言的小伙伴都熟悉super这个关键字&#xff0c;接下来&#xff0c;我们来研究他的一些基础用法吧。 定义名字为Father的类 package superkeyworld;public class Father {public String name;public int age;public Father() {}public Father(String name, int age…

canpro脚本_AE/PR脚本-创建编辑导入导出专业字幕脚本 Subtitle Pro 2.8.0 + 使用教程...

Subtitle Pro是一个专业的插件&#xff0c;可让您直接在After Effects和Premiere Pro中为视频创建字幕。可将字幕快速的导入或导出。您可以导入.srt文件或任何字幕格式&#xff0c;也可以编写文本。一键翻译单词&#xff0c;一键同步时间。不仅是简单的字幕文字&#xff0c;还可…

【概率论】1-2:计数方法(Counting Methods)

title: 【概率论】1-2:计数方法(Counting Methods) categories: MathematicProbability keywords:Counting Methods技术方法Combinatorial Methods组合方法Multiplication乘法法则Permutations排列Stirling’s Formula斯特林公式 toc: true date: 2018-01-25 10:35:46Abstract:…

Python字符编码详解

Python字符编码详解 http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html本文简单介绍了各种常用的字符编码的特点&#xff0c;并介绍了在python2.x中如何与编码问题作战 &#xff1a;&#xff09; 请注意本文关于Python的内容仅适用于2.x&#xff0c;3.x中str和…

使用sql服务器发送贺卡_创建和发送免费电子贺卡的最佳网站

使用sql服务器发送贺卡With the holiday season upon us, it’s time to pull out the holiday card list and get writing. However, how would you like to save some money this year and also help save the environment? 随着假期的到来&#xff0c;是时候抽出节日贺卡清…

职称申报评审管理系统_《四川省职称评审管理暂行办法》出台

我省将探索实行职称评审电子证书&#xff0c;电子证书与纸质证书具有同等效力。12月29日&#xff0c;记者从省人社厅了解到&#xff0c;我省近日出台《四川省职称评审管理暂行办法》&#xff0c;从职称评审总体要求、评审主体、申报程序、组织实施、优化服务、强化监管等方面提…

WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能

码云地址&#xff1a; https://gitee.com/YuRenDaZ/WordCount 个人PSP表格&#xff1a; PSP2.1 PSP阶段 预估耗时 &#xff08;分钟&#xff09; 实际耗时 &#xff08;分钟&#xff09; Planning 计划 180 120 Estimate 估计这个任务需要多少时间 180 120 D…

网页的验证码

1.首先可以写一个产生随机验证码的aspx文件&#xff0c;如下产生四位数字&#xff1a; private void Page_Load(object sender, System.EventArgs e) { this.CreateCheckCodeImage(GenerateCheckCode()); } private string GenerateCheckCode() { …

荣耀9igoogle模式_iGoogle个性化主页的6种替代方法

荣耀9igoogle模式iGoogle has less than a year to go before it’s shut down for good on November 1, 2013. While Google seems to think that iGoogle isn’t necessary anymore, there are other services waiting to take its place. iGoogle距离其2013年11月1日永久关闭…

华为堡垒机_安恒信息成为“华为云优秀严选合作伙伴”,携手保障“云上”资产安全访问...

加快5G持续创新能力&#xff0c;为云计算行业注入新动能。近日&#xff0c;以“智者•同行•共赢”为主题的2020华为云ISV(严选)合作伙伴大会在杭州隆重举行。上百位华为云合作伙伴、行业大咖等专业人士齐聚一堂&#xff0c;探讨云计算产业热门话题。作为华为云重要的生态合作伙…