読者です 読者をやめる 読者になる 読者になる

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