我可以用@Autowire注释一个继承的最终属性吗?

Cha*_*ick 5 java spring annotations ibatis

解决方案:不,我不再扩展原始父级.

原文:
有没有办法注释继承的finalsetter方法?我正在扩展一个类,它有一个final我想@Autowire用Spring 的setter .父类来自库,无法修改.

我发现的一种解决方法是编写一个代理方法,但这似乎比必要的工作更多.

public abstract class SqlMapClientDaoSupport ... {
    public final void setSqlMapClient(SqlMapClient smc) {
        ...
    }
}

@Component
public class AccountDao extends SqlMapClientDaoSupport {
    // all this just to annotate an existing method?
    @Autowire
    public final void setSqlMapClientWorkaround(SqlMapClient smc) {
        super.setSqlMapClient(smc);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑1:以上示例已修改以反映用例:
用例是为Ibatis/Spring实现扩展公共基类的 DAO对象.每个DAO都需要相同的属性集,每个都需要配置为bean.我目前通过单独配置每个来完成此操作applicationContext.xml.

<bean id="accountDAO" 
  class="com.example.proj.dao.h2.AccountDAOImpl"
  p:sqlMapClient-ref="sqlMapClient" />
<bean id="companyDAO" 
  class="com.example.proj.dao.h2.CompanyDAOImpl"
  p:sqlMapClient-ref="sqlMapClient" />
<!-- etc... -->
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用组件扫描来自动发现和自动装配DAO对象,我无法复制/粘贴botch.

<context:component-scan base-package="com.example.proj.dao.h2" />
Run Code Online (Sandbox Code Playgroud)

我没有在注释指南中看到如何注释除声明的属性/成员之外的属性/成员.我希望这是我想念的东西.

编辑2:我不再扩展SqlMapClientDaoSupport类,而是我的AccountDao是一个POJO,它实现了Support类提供的少量功能.这允许我随意使用@Autowire.

Cha*_*ick 0

不,没有办法注释继承的最终方法。

我没有扩展支持类 ( SqlMapClientDaoSupport),而是在我的项目中重新实现了它(它的行为是最小的),根据需要注释方法,并且我的 DAO 扩展了该支持类。