Springinheritance – 注释

我遇到了这个链接 ,它解释了bean如何被inheritance。 假设此示例中的HelloWorld类使用@Component注释作为bean公开,如何创建另一个inheritance此bean的bean? 我是否可以使用extends来inheritanceHelloWorld bean并将@Component添加到新类中以扩展现有bean,将其公开为具有其他function的新bean?

首先进行抽象配置,这是通过将其标记为@Configuration来实现的,如下所示:

 // notice there is no annotation here public class ParentConfig { @Bean public ParentBean parentBean() { return new ParentBean(); } } 

然后你扩展它,像这样:

 @Configuration public class ChildConfig extends ParentConfig { @Bean public ChildBean childBean() { return new ChildBean(); } } 

结果将与您执行此操作完全相同:

 @Configuration public class FullConfig { @Bean public ParentBean parentBean() { return new ParentBean(); } @Bean public ChildBean childBean() { return new ChildBean(); } } 

编辑 :回答评论中的后续问题。

如果Spring选择了父类和子类这两个类,那么重复的bean会出现问题,所以你不能直接扩展它 。 即使您重写方法,来自超类的bean也将由ParentConfig实例化。

由于您的父类已经编译 ,因此您有两个选择:

  1. 与父类的作者交谈,并请他改变它。

  2. 更改@ComponentScan包。

澄清解决方案2:

如果父类在com.parent.ParentConfig包中,并且子类是com.child.ChildConfig包,则可以配置组件扫描,以便选择com.child 下的类

您可以使用主配置文件(想想应用程序类)上的@ComponentScan("com.child")批注指定组件扫描包。