概要
クラスやメソッドに自作annotationをつけ、annotationにて指定した文字を使用する。
- 環境
- Spring AOP 4.3.5
- cglib 2.1_3
クラスにつけたannotationと、メソッドにつけたannotationでは取得方法が異なっており、そこで躓きました。。
###Class版
クラスにつけるannotation
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ClassAnnotation{
String value() default "defalut";
Aspect対象のクラス
@ClassAnnotation("Class_01")
public class SampleController {
Aspectの実現部(PointCatはAroundで実施)
@Around("@within(ann)")
public void classIntercepter(ProceedingJoinPoint pjp, ClassAnnotation ann) throws Throwable{
System.out.println(ann.value());
pjp.proceed();
###Method版
メソッドにつけるannotation
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodAnnotation {
String value() default "defalut";
Aspect対象のメソッド
@MethodAnnotation("Method_01")
public void sampleMethod(
Aspectの実現部(
@Around("@annotation(ann)")
public void MethodIntercepter(ProceedingJoinPoint pjp, MethodAnnotation ann) throws Throwable{
System.out.println(ann.value());
pjp.proceed();
###値を使用しない場合はannotationクラスのフルパス設定をする
Aspectの実現部(クラス)
@Around("@within(com.example.annotation.ClassAnnotation)")
public void classIntercepter(ProceedingJoinPoint pjp) throws Throwable{
pjp.proceed();
Aspectの実現部(メソッド)
@Around("@annotation(com.example.annotation.MethodAnnotation)")
public void classIntercepter(ProceedingJoinPoint pjp) throws Throwable{
pjp.proceed();
参照:
ちょっと特殊なJavaのアノテーション
Spring AOP ポイントカット指定子の書き方について
AspectJを使ってAnnotationを活用しよう 前編