java – 使用继承重叠Spring bean名称
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用继承重叠Spring bean名称,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1654字,纯文字阅读大概需要3分钟。
内容图文
我有一些示例代码发布到github,所以我不会在这里包含长代码片段,请参阅:https://github.com/ralf-lackinger/spring-inheritance/tree/master
我有一个父母和一个孩子,都是春豆.当我想通过bean的名称通过BeanFactory检索Parent时,返回Child的一个实例.这会给我带来问题,因为我希望它们具有不同的名称并仅返回特定的名称,因为子类会覆盖我从超类中使用的方法:
父名称:parent,parentName1,parentName2
子名称:child,childName1,childName2
简短的代码示例,请参阅我的github存储库以获取完整的代码示例:
context.getBean(“parentName1”,Parent.class).print();
收益:
从孩子打印.
也许有一个使用Spring的限定符的解决方案,但我不确定这是否有效.我已经尝试了@Primary注释,但没有帮我解决这个问题.
我正在使用:
java版“1.8.0_66”
春季4.2.3.RELEASE
编辑:
我使用名为“fixed-name-conflict”的分支更新了github存储库,其中包含了我需要进行的更改以解决我的问题.有关更多信息,请参阅已接受的答案(以及那里的公告).
谢谢@oailloud的帮助.
编辑2:
有问题的部分是这些方法:
家长:
@Bean(name = {"parentName1", "parentName2"})
public Parent additionalBeanNames() {
return new Parent();
}
和孩子:
@Override
@Bean(name = {"childName1", "childName2"})
public Child additionalBeanNames() {
return new Child();
}
解决方案是重命名为Child的方法,因此孩子不会获取Parent的其他bean名称.
解决方法:
这是因为你覆盖了Child类中的方法additionalBeanNames.我猜Spring会感到困惑,并使用Parent @Bean中的信息创建一个Child.
只需在您的Child类中重命名additionalBeanNames()方法,并使用@Bean(name =“…”)明确地命名bean.
如果您需要在这两种方法之间分解代码,只需在第三种受保护的方法中提取它.
另外,请注意:您要为每个类创建两个实例.一个是因为使用@Bean注释的方法,另一个是因为@Component.在这种情况下,实例是从类名中命名的.这就是为什么你的上下文中有“父”和“子”bean的原因.
内容总结
以上是互联网集市为您收集整理的java – 使用继承重叠Spring bean名称全部内容,希望文章能够帮你解决java – 使用继承重叠Spring bean名称所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。