Springアノテーションって長いので、なんか気の利いた名前をつけたいんですけど、とりあえず「あのSpring」にしておきます。
で、ついでに@InitMethodとか@DestroyMethodとかの定義だけやってみて、登録するようなコードも書いてみたんですけど、試してない。
今回のヒットは@TransactionSupportアノテーションです。
こんな感じでDAOのインタフェースを作ります。この@TransactionalアノテーションはSpring Transactionにもとから用意されているアノテーションです。
@Transactional public interface MenteDao { List getList(Class table); Serializable addData(Object data); }
で、これをimplementsしたDAO実装を書きます。元になる設定はあらかじめXMLにしこんでおきます。
@TransactionSupport(transactionManager="hibernateTransaction") @Bean(parent="daoBase") public class MenteDaoImpl extends HibernateDaoSupport implements MenteDao{ ... }
そしたら、こんな感じで使います。
public class TestDaoAction extends Action{ public ActionForward execute(...) { Listl = menteDao.getList(Tshohin.class); request.setAttribute("list", l); return mapping.findForward("success"); } @Inject public void setMenteDao(MenteDao md){ menteDao = md; } MenteDao menteDao; }
それなりに自動バインディングします。インジェクションするメソッドを明示的に指定してやれば、型による自動バインディングでも害はないかなと思うのですが、どうでしょう?
で、インジェクションしたいメソッドは、明示的に指定するようにしています。アノテーションがないメソッドにはインジェクションしません。
ここらへんの説明をちゃんと書いてないので、まだダウンロードできるようにはしてませんけど、だいたいこんな方向性でやってます。
同じイメージでAOPアノテーションを定義すると、結構使いやすくなるのかとも思うんですが、AOPを自分で使ってないので、感覚がつかめません。