我有一个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。但我不需要一个代理。
:
我是否正确,枚举的代理导致了这个问题?
如何避免这个问题?一种方法是禁用枚举的代理,但是我该怎么做呢?
根据@chrylis的评论,我认为(至少目前)没有"适当"的方法来解决这个问题。
作为一种解决方法,我不自动连接bean,而是在上下文中显式地创建它,并调用逻辑来直接确定正确的enum。因为有视图的地方我需要枚举,这至少对我有效。
如果我有时间,我会提交一个错误,并更新答案的链接到它