解决方案:不,我不再扩展原始父级。
原文:
有没有办法注释继承的final
setter方法?我正在扩展一个类,该类具有Spring final
希望使用的二传手@Autowire
。父类来自库,无法修改。
我发现一种解决方法是编写代理方法,但这似乎比必要的工作还要多。
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。
不,没有办法注释继承的final方法。
SqlMapClientDaoSupport
我没有扩展支持类(),而是在项目中重新实现了它(行为很小),并根据需要注释了方法,然后我的DAO扩展了该支持类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句