注入enum作为依赖项失败,抛出IllegalArgumentException,可能是由于代理



我有一个Spring bean,它期望在它的一个构造函数参数中有一个enum。枚举是在

上下文中创建的
@Bean
public MyEnum stage() {
    return MyEnum.VALUE1; /// actually here is some logic implemented to determin what enum value should get returned.
}

当我启动ApplicatioContext时,我得到以下异常

org.springframework.beans.BeanInstantiationException: Failed to instantiate [MyBean]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch
// .... more stuff
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
... 47 more

我认为这是因为Spring将枚举包装在代理中,我需要它来启用AOP。但我不需要一个代理。

:

  1. 我是否正确,枚举的代理导致了这个问题?

  2. 如何避免这个问题?一种方法是禁用枚举的代理,但是我该怎么做呢?

根据@chrylis的评论,我认为(至少目前)没有"适当"的方法来解决这个问题。

作为一种解决方法,我不自动连接bean,而是在上下文中显式地创建它,并调用逻辑来直接确定正确的enum。因为有视图的地方我需要枚举,这至少对我有效。

如果我有时间,我会提交一个错误,并更新答案的链接到它

相关内容

  • 没有找到相关文章

最新更新