在Strtus2 Action类中,我的方法名为getData(),getDetails()。除了这些,我在我的动作课中有几个getter / setter。 我想使用Spring的AOP功能进行日志记录。我需要维护Log for getData()和getDetails()方法,后者又调用服务类,但我不想为动作类中存在的getter / setter维护Log。 我不想在我的Aspect中硬编码方法名称。没有任何关于如何实现这一点的线索。请帮帮我。
我的AOP Logger类就像:
@Before("myPointCut() && allService()")
public void logEntryService(JoinPoint joinPoint) {
System.out.println("Start of " + joinPoint.getSignature().getName() + "() of "+joinPoint.getThis());
start = System.currentTimeMillis();
}
@After("myPointCut() && allService()")
public void logExitService(JoinPoint joinPoint) {
System.out.println("End of " + joinPoint.getSignature().getName() + "() of "+joinPoint.getThis());
start = System.currentTimeMillis();
}
@Pointcut("@annotation(com.ing.trialbal.log.LogThis)")
public void myPointCut() {
System.out.println("*************My PointCut");
}
@Pointcut("execution(* com.ing.trialbal.*.*.*(..))")
public void allService() {
System.out.println("************All service");
}
LogThis.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogThis {
}
但是这在我的应用程序中创建了非常紧密的耦合,因为我总是必须在服务的每个方法上编写@Logthis,并且为了获取它们的日志。
答案 0 :(得分:1)
切入点与@annotation()
绑定。
像
注释类
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {}
AOP记录器
@Pointcut("@annotation(com.Loggable)") // && execution( ... )
动作类
@Loggable
Object getData() {}
@Loggable
Object getDetails() {}