当前位置: 首页 > 知识库问答 >
问题:

是否可以让Spring只实例化继承中的父bean(而不是实例化子bean)?

仇阳州
2023-03-14

我有三节课。

>

  • 一个抽象类,abstractA有一个受保护的构造函数
  • 一个类扩展了抽象类,父类有两个构造函数
  • 一个类扩展父类,子类有一个构造函数

    @CustomComponent
    public abstract class abstractA {
      Object var1;
      Object var2;
      Object var3;
    
      @Autowired
      protected abstractA(Object arg1, Object arg2, Object arg3){
        var1 = arg1;
        var2 = arg2;
        var3 = arg3;
      }
    
    }
    

    这是从抽象类扩展而来的父类

    @CustomComponent
    public class parent extends abstractA {
    
    
          @Autowired
          public parent(Object arg2, Object arg3){
            this(arg1FromSomeEnum, arg2, arg3);
          }
    
          protected parent(Object arg1, Object arg2, Object arg3){
            super(arg1, arg2, arg3);
          }
    
        }
    

    这是从父类扩展而来的子类

     @CustomComponent
     public class child extends parent {
    
          @Autowired
          public child(Object arg2, Object arg3){
            super(arg1FromSomeEnum, arg2, arg3);
          }
    
        }
    

    自定义组件看起来像这样

    @Component
    @Scope(value = "prototype")
    @Inherited
    public @interface CustomComponent {
      String value() default "";
    }
    

    所以,当spring为特定测试实例化所有bean时,它会正确地实例化子bean。当父bean被实例化时,它得到2个bean[父和子]。所以,我最终会出错,

    类型父的多个bean

    现在,这里怎么了?如何获得正确的实例化?我应该使用@Qualifier还是@value,如果是的话,在哪里和什么地方?

  • 共有1个答案

    夹谷星河
    2023-03-14

    是的,您应该使用@Qualifier注释。下面的链接更详细地解释了它。使用@Qualifier注释创建唯一bean

     类似资料:
    • 下面是BeanFactoryPostProcessor的简要功能 BeanFactoryPostProcencer允许您修改实际的bean定义,而不是创建它时的实例。Spring IoC容器将允许BeanFactoryPostProcess读取配置元数据,并可能在容器实际实例化任何bean之前对其进行更改。属性持有人配置是BeanFactoryPostProcess的示例,用于将一些属性值外部化到

    • 每个人都知道可以从正在运行的JVM中获得堆转储。另一种方式可能吗?我们可以使用堆转储来启动JVM吗? 这个问题我已经想了很久了。如果这是可能的,它将解决大量的时间,并使支持工程师容易思考。如果我们必须重新创建一些我们的客户所面临的罕见的问题,那么它就会大有帮助。[假设底层硬件和Java运行时是相同的,并且所有的支持文件也存在于文件系统中各自的位置]。 添加注意:这样做的意图不是在OOM发生时,而是

    • ApplicationContext是否在spring中自动实例化? 如果像这样定义bean 然后我有了我的config类,它告诉spring容器在哪里通过注释@ComponentScan查找bean spring正在自动创建一个上下文,加载我所有的bean吗?还是我必须以编程方式创建它?如果是这样,我该怎么做,用这样的东西? 即使这样做,也可能会有一个问题,因为每次我需要上下文时都必须调用新的A

    • 需要一些关于Spring自动装配和范围的帮助。 这是基本的应用程序结构: > CustomHttpClient由我的应用程序中的多个服务使用。每当我使用CustomHttpClient时,我都会通过以下方式自动连接该客户端的实例: 我使用拦截器修改CustomHttpClient中的一些变量,如下所示: 现在,问题来了。如果我按照上述方式设置了所有内容,那么每当我通过拦截器更改CustomHttp

    • JAR2(非Spring项目)

    • 7.3.2 bean的实例化 bean的定义本质上是创建一个或多个对象的配方。当被请求时,容器在配方中查找指定名称的bean,使用bean定义中封装的配置元数据来创建(或得到)一个实际的对象。 如果使用基于XML的配置元数据,在<bean/>元素的class属性中指定被实例化对象的类型(或类)。class属性通常是强制性的,它在内部实质是BeanDefinition实例的Class属性。(例外情况