在我们的应用程序中,我们使用@autowired按名称使用。
@Autowired
public AlertSearchEndpoint(AlertSearchService alertSearchServiceImpl, AlertSearchService alertSearchServiceImpl_v4, AlertSearchService alertSearchServiceImpl_v5) {
super();
this.theService = alertSearchServiceImpl;
this.theService_v4 = alertSearchServiceImpl_v4;
this.theService_v5 = alertSearchServiceImpl_v5;...
这对我们有效,但是在Eclipse中,当我们关闭编译器设置(-g?)时,"将变量属性添加到生成的类文件",它停止工作。
由于某种奇怪的原因,我们的公司想将其关闭。有什么办法不使用" @qualifier"来解决此问题?如果我们不得不添加此注释,我们将进行很多代码更改。
我的选择是什么?为什么要停止工作?
-g:vars
编译器选项旨在保留字节上的局部变量名称,以便在运行时可以找到alertSearchServiceImpl
,alertSearchServiceImpl_v4
等作为变量名称。
当您注入相同类型的多个变量时,Spring需要弄清楚哪个是哪个,并且依赖于此信息。
否则,无法区分三个方法参数,因为只有类型信息可用(它们都是相同类型的类型) - 也就是说@Qualifier
注释。
一个(我认为是错误的!)在没有明确限定符的情况下解决此问题的方法是编写您自己的autowirecandidateresolver实现,该实现依赖于参数位置(并假定第一个参数应该是版本X,第二个应为版本,是的,依此类推)。但这很容易出错,以至于我永远不会抓住机会。
至于用预选符注释所有参数,即使它是一个大的代码库,我认为您可以使用少数正则表达式出来,然后用带注释的版本"查找并替换"所有这些参数。