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を省略した形で直接書けるようになった雰囲気。