Springアノテーションのその後

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(...) 
	{
		List l = menteDao.getList(Tshohin.class);
		request.setAttribute("list", l);
		
		return mapping.findForward("success");
	}
	
	@Inject
	public void setMenteDao(MenteDao md){
		menteDao = md;
	}
	MenteDao menteDao;
}

それなりに自動バインディングします。インジェクションするメソッドを明示的に指定してやれば、型による自動バインディングでも害はないかなと思うのですが、どうでしょう?
で、インジェクションしたいメソッドは、明示的に指定するようにしています。アノテーションがないメソッドにはインジェクションしません。


ここらへんの説明をちゃんと書いてないので、まだダウンロードできるようにはしてませんけど、だいたいこんな方向性でやってます。
同じイメージでAOPアノテーションを定義すると、結構使いやすくなるのかとも思うんですが、AOPを自分で使ってないので、感覚がつかめません。