Spring继承 - 注释

Pun*_*cky 6 java spring

我遇到了这个链接,它解释了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.

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

  1. 与父母班级的作者交谈,并请他改变它.

  2. 更改@ComponentScan包裹.

澄清解决方案2:

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

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