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
实例化。
由于您的父类已经编译 ,因此您有两个选择:
-
与父类的作者交谈,并请他改变它。
-
更改
@ComponentScan
包。
澄清解决方案2:
如果父类在com.parent.ParentConfig
包中,并且子类是com.child.ChildConfig
包,则可以配置组件扫描,以便仅选择com.child
下的类 。
您可以使用主配置文件(想想应用程序类)上的@ComponentScan("com.child")
批注指定组件扫描包。