我想在 super 抽象类
中声明@Bean
,以防止为每个子类声明它。
考虑这个类层次结构:
@Configuration
public class Config {
public static abstract class A {
@Bean
public myBean() {
return new MyBean();
}
}
public static class B extends A {
// Some stuff here
}
public static class C extends A {
// Some other stuff here
}
}
我无法在 Spring Boot 1.5.9(Spring Framework 4.3.13)中执行此操作。
它抛出:
org.springframework.beans.BeanInstantiationException:无法实例化 foo.bar.A:它是抽象类吗?
有没有办法防止每个子类重复@Bean
?
最佳答案
目前,您的问题不是重复的 beans。问题是
class A
未使用 @Configuration
进行注释。如果添加它,它将毫无问题地启动。
以下是配置类的规范。 The Spring's @Configuration documentation州 -
- 配置类必须作为类提供(即不是作为从工厂方法返回的实例),以便通过生成的子类实现运行时增强。
- 配置类必须是非最终的。
- 配置类必须是非本地的(即不能在方法内声明)。
- 任何嵌套配置类都必须声明为静态。
- @Bean 方法可能不会依次创建更多配置类(任何此类实例都将被视为常规 Bean,其配置注释不会被检测到)。
关于重复的 Bean
只会创建单个 Bean。 bean 定义只会被加载和创建一次:)
<小时/>关于java - 如何在 super 抽象类中使用@Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463262/