我有一个Spring bean,它在其中一个构造函数参数中需要一个枚举。枚举是在
的上下文中创建的@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。但我不需要在枚举周围使用代理。
问题:
我是否认为枚举的代理导致了这个问题?
如何避免此问题?一种方法是禁用enum的代理,但我该怎么做?
答案 0 :(得分:0)
根据@chrylis评论,我假设(至少现在)没有"正确"解决这个问题的方法。
作为一种解决方法,我不会自动装配我的bean,但在上下文中创建它并调用逻辑来直接确定正确的枚举。由于有视图的地方我需要枚举,这至少对我有用。
如果我找时间,我会提交错误并通过链接更新答案