取消选择"Add variable attributes to class files"时,按名称命名的 Spring @Autowired停止工作



在我们的应用程序中,我们使用@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编译器选项旨在保留字节上的局部变量名称,以便在运行时可以找到alertSearchServiceImplalertSearchServiceImpl_v4等作为变量名称。

当您注入相同类型的多个变量时,Spring需要弄清楚哪个是哪个,并且依赖于此信息。

否则,无法区分三个方法参数,因为只有类型信息可用(它们都是相同类型的类型) - 也就是说@Qualifier注释。

一个(我认为是错误的!)在没有明确限定符的情况下解决此问题的方法是编写您自己的autowirecandidateresolver实现,该实现依赖于参数位置(并假定第一个参数应该是版本X,第二个应为版本,是的,依此类推)。但这很容易出错,以至于我永远不会抓住机会。

至于用预选符注释所有参数,即使它是一个大的代码库,我认为您可以使用少数正则表达式出来,然后用带注释的版本"查找并替换"所有这些参数。

相关内容

最新更新