解決方法:不,我不再延長原始父級。我可以使用@Autowire註解繼承的最終財產嗎?
原創:
有沒有一種方法來註釋一個繼承的final
setter方法?我正在擴展一個有final
二傳手的課程,我想用@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:以上示例修改以反映用例:
用例正在執行DAO對象爲iBATIS /彈簧 延伸的共同base class。每個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" />
我沒有在annotation guide看到一個如何詮釋不到哪裏聲明以外的 屬性/成員。我希望這是 但我錯過了。
編輯2:我不再延長SqlMapClientDaoSupport類,而不是我的AccountDao是實現什麼正在支持類提供什麼功能的POJO。這使我可以隨意使用@Autowire。
當你嘗試時會發生什麼? – skaffman 2009-06-18 10:35:22
在沒有在子類中重新聲明它的情況下,如何在超類上註解方法的語法是? – Chadwick 2009-06-18 20:27:11