我遇到了这个链接,它解释了bean如何被继承.假设此示例中的HelloWorld类使用@Component注释作为bean公开,如何创建另一个继承此bean的bean?我是否可以使用extends来继承HelloWorld bean并将@Component添加到新类中以扩展现有bean,将其公开为具有其他功能的新bean?
ESa*_*ala 10
首先进行抽象配置,这是通过不将其标记为实现的@Configuration,如下所示:
// notice there is no annotation here
public class ParentConfig {
@Bean
public ParentBean parentBean() {
return new ParentBean();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你扩展它,像这样:
@Configuration
public class ChildConfig extends ParentConfig {
@Bean
public ChildBean childBean() {
return new ChildBean();
}
}
Run Code Online (Sandbox Code Playgroud)
结果将与您执行此操作完全相同:
@Configuration
public class FullConfig {
@Bean
public ParentBean parentBean() {
return new ParentBean();
}
@Bean
public ChildBean childBean() {
return new ChildBean();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:回答评论中的后续问题.
如果Spring选择了父类和子类这两个类,那么重复的bean会出现问题,所以你不能直接扩展它.即使你重写方法,超类中的bean也将被实例化ParentConfig.
由于您的父类已经编译,因此您有两个选择:
与父母班级的作者交谈,并请他改变它.
更改@ComponentScan包裹.
澄清解决方案2:
如果父类在包中com.parent.ParentConfig,并且子类是包com.child.ChildConfig,则可以配置组件扫描,以便只 com.child接收获取的类.
您可以使用@ComponentScan("com.child")主配置文件上的注释指定组件扫描包(例如,应用程序类).
| 归档时间: |
|
| 查看次数: |
8773 次 |
| 最近记录: |