gpt4 book ai didi

java - Spring继承-注解

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:21 27 4
gpt4 key购买 nike

我遇到了这个link这解释了如何继承 bean。假设此示例中的 HelloWorld 类使用 @Component 注释作为 bean 公开,如何创建另一个继承此 bean 的 bean?我可以使用 extends 来继承 HelloWorld bean 并将 @Component 添加到新类,以便扩展现有的 bean 并将其作为具有附加功能的新 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 的问题,因此不能直接扩展它。即使您覆盖了方法,父类(super class)中的 bean 也将由 ParentConfig 实例化。

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

  1. 与父类的作者交谈,请他修改。

  2. 更改 @ComponentScan 包。

澄清解决方案 2:

如果父类在com.parent.ParentConfig包中,子类在com.child.ChildConfig包中,那么可以配置组件扫描只有 com.child 下的类才会被选中。

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

关于java - Spring继承-注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com