解決策:いいえ、もはや元の親を拡張していません。継承された最終プロパティに@Autowireを使用して注釈を付けることはできますか?
オリジナル:
継承されたfinal
セッターメソッドにアノテーションを付ける方法はありますか?私は@Autowire
にSpringとしたいfinal
セッターがあるクラスを拡張しています。親クラスはライブラリからのものであり、変更することはできません。
私が見つけた回避策は、プロキシメソッドを作成することですが、これは必要以上に多くの作業のようです。
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は同じ プロパティセットを必要とし、それぞれを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 オブジェクトを発見し、autowireするコンポーネント・スキャンを使用することを好むだろう。
<context:component-scan base-package="com.example.proj.dao.h2" />
私は1つが宣言場所以外の プロパティ/メンバーに注釈を付けるだろうかannotation guideには表示されません。私はそれが 何か私は欠けていることを望んでいる。
は編集2:私は、もはやSqlMapClientDaoSupportクラスを拡張していますは、代わりに私のAccountDaoは少し機能がサポートクラスによって提供されていたものを実装してPOJOです。これにより私は@Autowireを自由に使うことができます。
試してみるとどうなりますか? – skaffman
サブクラスで再宣言することなく、スーパークラスのメソッドにアノテーションを付ける構文は何ですか? – Chadwick