使用@Autowired annotation时,我遇到了一个奇怪的问题
我正在将一个弹簧组件注入另一个弹簧组件,如下面
import com.myutil.GenericUtils;
@Component
public class MyDomainImpl implements MyDomain {
@Autowired
private GenericUtils genericUtils;
}
这很好用
当我尝试将相同的组件注入不同的组件(实现通用接口)时,会抛出以下错误。
java.lang.IllegalArgumentException:参数不表示注释类型:Autowired
这是抛出错误的代码
import com.myutil.GenericUtils;
@Component
public class MyMapper implements GenericMapper<Mycomponent,MycomponentSO>{
@Autowired
private GenericUtils genericUtils;
}
我第一次使用Spring FW时看到此错误。 我试图找出根本原因,但没有运气。
如果我删除自动装配,则不会发生编译错误
如果有人遇到此错误,请告知解决方案
由于
住
答案 0 :(得分:0)
我认为自动连接MyMapper的问题不是自动连接GenericUtils,如果你使用GenericMapper接口自动连接它,请尝试将其更改为MyMapper:
@Autowired
private GenericMapper myMapper ;
到
@Autowired
private MyMapper myMapper ;
如果它正在工作,那么大多数情况下你都有一个代理包装你的bean。
<强>更新强>
再次重新审核错误之后我发现它很可能来自java自己,特别是来自RoundEnvironment
它有getElementsAnnotatedWith
这个方法是抛出异常
IllegalArgumentException - 如果参数不表示 注释类型
这是你的情况,这意味着它没有考虑Autowired作为注释类型,所以请检查你是否有任何其他类名称Autowired可能导入错误,或者你的构建中有一些丢失的jar。