我想在执行方法时以及方法结束时进行记录。为此,我有一个简单的方面
@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。
答案 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的组件扫描程序的规则。)