Java Spring:根据父实现选择bean实现
我有一个抽象类和两个实现。让我们称他们为Java Spring:根据父实现选择bean实现,java,spring,Java,Spring,我有一个抽象类和两个实现。让我们称他们为ParentAbstract,ParentA和ParentBParentAbstract具有类型为BeanAbstract:bean的属性。这个抽象类有两种实现:BeanA和BeanB 可以使用Spring,以便它将ParentA中的BeanA和ParentB中的BeanB注入 请注意,我不能将ParentA和ParentB用作SpringBean,因为它们是Wicket页面。Spring默认尝试按类型自动连接。当存在歧义时(例如这里的情况),您必须提供一
ParentAbstract
,ParentA
和ParentB
ParentAbstract
具有类型为BeanAbstract:bean
的属性。这个抽象类有两种实现:BeanA
和BeanB
可以使用Spring,以便它将ParentA
中的BeanA
和ParentB中的BeanB
注入
请注意,我不能将ParentA
和ParentB
用作SpringBean,因为它们是Wicket页面。Spring默认尝试按类型自动连接。当存在歧义时(例如这里的情况),您必须提供一个限定符。
推荐的方法是显式声明配置中的依赖项(XML
或@configuration
),或按名称自动连线
@Resource(name="beanA")
在您的ParentAbstract
中添加一个抽象方法
abstract setBean(BeanAbstract bean);
然后在子类中,覆盖它们并注释:
@Override
@Autowired
@Qualifier("name") // or @Resource("name")
setBean(BeanAbstract bean) {
this.bean=bean;
}
除非我错了,否则协方差只允许用于返回类型。好的,谢谢,这回答了我的问题。现在我要问一个问题:D@artbristol,请注意,@限定符
不鼓励使用@资源
。问题是,当我创建父对象a
时,我希望bean
的类型为BeanA
,当我创建父对象B
时,bean
的类型应该是BeanB
。我在应用程序中使用这两种实现。