用于记录方法开始/结束的Java方面

时间:2015-01-02 11:28:06

标签: java aspectj

我想在执行方法时以及方法结束时进行记录。为此,我有一个简单的方面

@Aspect
public class StartEndLogger {
  @Around("execution(* *(..)) && @annotation(StartEndLog)")
  public Object around(ProceedingJoinPoint point) {
    Object result = null;
    System.out.println("start");
    try {
        result = point.proceed();
    } catch (Throwable e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("end");
    return result;
  }
}

然后定义注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface StartEndLog {

}

为了测试,我有:

@StartEndLog
public static void main(String[] args) throws IOException {
}

事实是,方面不拦截方法执行(运行时没有进入方面)。我应该以某种方式注册此注释的方面吗?我不使用任何Spring。

1 个答案:

答案 0 :(得分:0)

你能试试吗?

在" META-INF / aop.xml"你的jar文件,包括Aspect类的完整路径

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver>
        <include within="somepackage.StartEndLogger " />
    </weaver>
    <aspects>
        <concrete-aspect name="MyLoggingAspect"
         extends="somepackage.StartEndLogger">
            <pointcut name="around_logging" expression="execution(* *(..)) && @annotation(StartEndLog)"/>
        </concrete-aspect>
    </aspects>
</aspectj>

如果您使用的是spring框架,请使用&#34; @Component&#34;。

注释您的课程。

这是Spring的摘录:

  

您可以在Spring XML中将方面类注册为常规bean   配置,或通过类路径扫描自动检测它们 - 只是   像任何其他Spring管理的bean一样。但是,请注意@Aspect   注释不足以在类路径中自动检测:For   为此,您需要添加单独的@Component注释(或   或者,一个自定义的构造型注释,符合条件   Spring的组件扫描程序的规则。)