决议:不,我不再延长原来的父母。
原件:
有没有办法注释继承的final
setter方法?我正在扩展一个具有final
setter的类,我希望@Autowire
使用Spring。父类来自库,无法修改。
我找到的解决方法是编写一个代理方法,但这似乎比必要的工作更多。
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对象
它扩展了一个共同的base class。每个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 对象自动,我无法复制/粘贴botch。
<context:component-scan base-package="com.example.proj.dao.h2" />
我没有在annotation guide中看到如何注释a 财产/会员以外的地方。我希望是的 我失踪的东西。
编辑2: 我不再扩展SqlMapClientDaoSupport类,而是我的AccountDao是一个POJO,它实现了Support类提供的少量功能。这允许我随意使用@Autowire。
答案 0 :(得分:2)
您是否尝试过使用xml进行配置?因为它是一个看起来你无法改变的现有类,所以它是用xml配置它的明确候选者。然后你可以将它指定为autowire“,甚至可以在xml中配置属性。
答案 1 :(得分:0)
答案 2 :(得分:0)
不,没有办法注释继承的最终方法。
我没有扩展支持类(SqlMapClientDaoSupport
),而是在我的项目中重新实现它(它的行为很小)根据需要注释方法,并且我的DAO扩展了该支持类。
答案 3 :(得分:0)
你可以为所有最终的setter和@Autowired
构造函数创建一个带有params的新构造函数,然后在构造函数中调用setter。