关于Struts2 Spring AOP Logger

时间:2013-07-03 05:13:19

标签: spring struts2 spring-aop

在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,并且为了获取它们的日志。

1 个答案:

答案 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() {}