解决方案:不,我不再扩展原始父级。
原文:
有没有办法注释继承的final
setter方法?我正在扩展一个具有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);
}
}
编辑 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... -->
我更喜欢使用组件扫描来自动发现和自动连接 DAO 对象,我无法复制/粘贴这些对象。
<context:component-scan base-package="com.example.proj.dao.h2" />
我在注释指南中看不到如何注释除声明位置之外的属性/成员。我希望这是我所缺少的。
编辑 2:我不再扩展 SqlMapClientDaoSupport 类,而是我的 AccountDao 是一个 POJO,它实现了 Support 类提供的小功能。这让我可以随意使用@Autowire。