将内部bean添加到Application Context会抛出未找到默认构造函数的情况

埃里克·B。

我正在尝试以编程方式在jUnit测试中将内部bean添加到我的应用程序上下文中。我不想通过给bean加上注释来污染我的上下文,@Component因为它将影响在同一上下文中运行的所有其他测试。

public class PatchBaseImplTest extends TestBase{

    /**
     * Sample test patch to modify the schema
     */
    public class SchemaUpdatePatch extends PatchBaseImpl {
        public SchemaUpdatePatch(){
            super();
        }

        @Override
        public void applyPatch() throws Exception {
        }
    };

    @Before
    public void setUp(){
        // add patch to context
        beanRegistry.registerBeanDefinition("SchemaUpdatePatch",  SchemaUpdatePatch.class,  BeanDefinition.SCOPE_PROTOTYPE);
        schemaPatch = (Patch)applicationContext.getBean("SchemaUpdatePatch", SchemaUpdatePatch.class);

    }
}

其中registerBeanDefinition定义为:

    public void registerBeanDefinition( String name, Class clazz, String scope){
        GenericBeanDefinition definition = new GenericBeanDefinition();
        definition.setBeanClass(clazz);
        definition.setScope(scope);
        definition.setAutowireCandidate(true);
        definition.setAutowireMode(GenericBeanDefinition.AUTOWIRE_BY_TYPE);

        registry.registerBeanDefinition(name,  definition);
    }

我可以看到Bean defn已添加到应用程序上下文中,但是当我尝试使用appContext.getBean()检索Bean时,Spring抛出错误,该类缺少构造函数:

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ia.system.patch.PatchBaseImplTest$SchemaUpdatePatch]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.ia.system.patch.PatchBaseImplTest$SchemaUpdatePatch.<init>()
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:83)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1000)
    ... 35 more
Caused by: java.lang.NoSuchMethodException: com.ia.system.patch.PatchBaseImplTest$SchemaUpdatePatch.<init>()
    at java.lang.Class.getConstructor0(Class.java:2800)
    at java.lang.Class.getDeclaredConstructor(Class.java:2043)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:78)
    ... 36 more

我尝试将默认构造函数添加到SchemaUpdatePatch类,但这似乎无关紧要。

但是,如果我用@Component对其进行注释,而不是通过编程将其添加到上下文中,然后尝试通过applicationContext.getBean()访问它,则它可以正常工作。

以编程方式将此bean添加到applicationContext的正确方法是什么?我的GenericBeanDefinition错误吗?我是否缺少某些东西来指定构造函数是什么?

埃里克·B。

写这篇文章实际上是宣泄的。帮助我找到我的错误/错误。必须使内部类为Static或Spring无法实例化它。希望这可以在将来对其他人有所帮助。

IE:

/**
 * Sample test patch to modify the schema
 */
static public class SchemaUpdatePatch extends PatchBaseImpl {
    public SchemaUpdatePatch(){
        super();
    }

    @Override
    public void applyPatch() throws Exception {
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将数据添加到对象内部的数组会添加到所有数组

将方法添加到js中函数内部的对象

将属性添加到JavaScript中的函数内部的对象?

将断点添加到默认构造函数

将预构造的Bean添加到Spring应用程序上下文

将事件回调函数添加到内部带有Font Awesome图标的按钮

如何将操作添加到在函数内部分布和定义的张量流图中?

将缩减数组添加到函数内部的变量中?(js)

通过 React 中的外部函数将项目添加到组件内部列表

如何将TreeNode添加到使用默认构造函数构造的JTree中?

将“条件”添加到函数 (R)

将类型添加到递归函数

将公式添加到函数中

将ifelse()添加到Map函数

将$ mdDialog添加到角度函数

将Iferror函数添加到VBA

将join()添加到map()函数

将函数添加到 ~/.zshrc

Java:如何编写将默认构造函数添加到类的注释

将FirebaseUI / Storage Pod添加到iOS App中会抛出未找到架构x86_64的SDWebImage框架

将构造函数的属性添加到ArrayList吗?

将构造函数参数添加到Ninject绑定中

将复制构造函数添加到类

如何将构造函数参数添加到列表?

通过朋友将构造函数添加到std :: vector

将 props 添加到构造函数作为 this.prop

无法在@Configuration构造函数中使用@Autowired,未找到bean

在PHP内部调用时,Javascript函数无响应。(尝试将项目添加到选项列表框中)

如何在没有属性构造函数的情况下将值添加到动态添加到属性的属性(Reflection.Emit)