java 包内类名重合_java – 使用继承重叠Spring bean名称

我有一个父母和一个孩子,都是春豆.当我想通过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,inheritance,spring

来源: https://codeday.me/bug/20190609/1202195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值