Aspectをメソッドに適用できるように
いいかげんな改造。本体じゃなくてS2Tiger側で。
org.seasar.framework.container.annotation.Aspect
@Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.TYPE, ElementType.METHOD }) public @interface Aspect { String interceptor(); String pointcut() default ".*"; // FIXME:デフォルト値OK? }
org.seasar.framework.container.factory.TigerAnnotationHandler
public void appendAspect(ComponentDef componentDef) { boolean isAppend = false; Class<?> clazz = componentDef.getComponentClass(); Aspect aspect = clazz.getAnnotation(Aspect.class); if (aspect != null) { String interceptor = aspect.interceptor(); String pointcut = aspect.pointcut(); appendAspect(componentDef, interceptor, pointcut); isAppend = true; } Method[] methods = clazz.getMethods(); for (Method method : methods) { Aspect mAspect = method.getAnnotation(Aspect.class); if (mAspect != null) { String interceptor = mAspect.interceptor(); String pointcut = method.getName(); appendAspect(componentDef, interceptor, pointcut); isAppend = true; } } if (isAppend) return; // FIXME:元の実装をみるとsuperは呼ばないほうがいいみたい? super.appendAspect(componentDef); }
一応これで、メソッドに
@Aspect(interceptor = "aop.traceInterceptor") public void hoge() { //... }
みたいにpointcutを省略した形で直接書けるようになった雰囲気。