解決策:いいえ、元の親を拡張していません。
オリジナル:継承されたセッターメソッド
に注釈を付ける方法はありますか?Springでやりたいセッターのあるfinal
クラスを拡張しています。親クラスはライブラリからのものであり、変更できません。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を自由に使用できます。