没有合适的资源?快使用搜索试试~ 我知道了~
首页Spring Boot: Bean definition overriding
Spring Boot: Bean definition overriding
1 下载量 164 浏览量
更新于2023-05-04
评论
收藏 77KB PDF 举报
在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅打印该bean的值(非常重要的是,它们都具有相同的名称)。 那么您认为将要打印什么? 示例1 @SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext applicationConte
资源详情
资源评论
资源推荐
Spring Boot: Bean definition overriding
在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。
为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。
因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅打印该bean的值(非常重要的是,
它们都具有相同的名称)。
那么您认为将要打印什么?
示例示例1
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
System.out.println(applicationContext.getBean("beanName"));
}
}
@Configuration
class config1 {
@Primary
@Order(Ordered.HIGHEST_PRECEDENCE)
@Bean
String beanName() {
return "BEAN1";
}
}
@Configuration
class config2 {
@Bean
String beanName() {
return "BEAN2";
}
}
可能的答案:可能的答案:
“ BEAN1 ”将被打印。可能是因为它具有@Primary注释,甚至还有@Order
“ BEAN2 ”将被打印。
异常
会被抛出,因为它不允许有几个豆同名。
还有其他版本吗?
正确答案正确答案
奇怪的是,正确答案对于spring boot 1.*和spring boot 2.*版本会有所不同。
如果您使用spring boot 1– 运行此代码,**“ BEAN2”**将被打印在控制台中。用spring boot 2– exception将被抛出。你知道正确的答
案吗?如果是,则可能是您在Pivotal工作:)
让我们一个一个地走:对于spring boot 1。如果我们查看日志,则会在此找到下一行:
INFO --- [main] o.s.b.f.s.DefaultListableBeanFactory:
Overriding bean definition for bean 'beanName' with a different definition:
replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true;
factoryBeanName=config1; factoryMethodName=beanName; initMethodName=null; destroyMethodName=(inferred);
defined in class path resource [com/example/test/config1.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3;
dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=config2; factoryMethodName=beanName; initMethodName=null;
destroyMethodName=(inferred);
defined in class path resource [com/example/test/config2.class]]
因此,config1bean被覆盖,config2 并打印了**“ BEAN2”**。
对于spring boot 2。如果我们查看日志,则会在此找到下一行:
***************************
APPLICATION FAILED TO START
weixin_38542148
- 粉丝: 4
- 资源: 939
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0