springでAOP
処理の中でアノテーションの値を取得したい場合は
Class clazz = hoge.class;
Constructor cs = clazz.getConstructors(); //コンストラクタ
Field fs = clazz.getDeclaredFields(); //フィールド
Method ms = clazz.getDeclaredMethods(); //メソッド
Annotation[] ma = ms[0].getParameterAnnotations(); //アノテーション
ターゲットのクラス名やメソッド名をとりたい
public void logBeforeExecution(JoinPoint jp) {
String cName = jp.getTarget().getClass().getName(); // クラス名
String mName = jp.getSignature().getName(); // メソッド名
メソッドの前後に処理を入れ込みたい場合
@Around("aspect.LoggingAspect.businessService()")
を使う。
そのときの引数は
public Object logAroundExecution(ProceedingJoinPoint pjp) throws Throwable {
のようにProceedingJoinPointを使うと
対象メソッドの引数をとりたい時は
Object[] args = pjp.getArgs();
対象メソッドの戻り値をとりたい時は
Object retVal = pjp.proceed();
springでAOPを使う場合に必要なライブラリ
spring-aspects
spring-aop
aspectjrt
cglib
それぞれがどういう役割なのかは調べてない
※参考
アノテーションの定義
http://www.techscore.com/tech/J2SE/JavaLanguage/7-2.html
アノテーション作成方法(アノテーション情報の実行時の取得)
http://www.ne.jp/asahi/hishidama/home/tech/java/annotation.html
アノテーションベースのAOP(spring)
http://www.okisoft.co.jp/esc/spring/spring04.html#annotation