使用spring AOP

时间:2015-06-03 21:44:39

标签: spring spring-mvc exception-handling spring-aop error-logging

我正在尝试使用spring AOP为我的应用程序实现日志记录和异常框架。我已经在ApplicationContext中为类定义了bean,并使用拦截器来记录入口,出口和异常(如果有的话)。

我的查询是:我是否需要为ApplicationContext中的每个类创建bean,或者是否可以在包级别对此进行概括。如果我的包中有30个类,我应该在我的AppContext中创建30个bean,而我更愿意在包级别执行它,如果可能的话。在这方面请帮助我。

1 个答案:

答案 0 :(得分:0)

您需要使用@Around建议。这里定义切入点,以便覆盖/拦截包的每个类和方法。见下面的示例 -

@Aspect
public class AllMethodLogging {

@Around(execution("* com.x.y..*.*(..)"))
public Object intercept(ProceddingJoinPoint pjp){

    String name = pjp.getSignature().getName();
    try {
        logger.info("started " + name);
        Object obj = pjp.proceed();
        logger.info("finished " + name + " successfully"); 
        return obj;
    } catch (Throwable t) {
         logger.error(name + " finished with Exception - " + t.getMessage());
         throw t;
    } finally {
        // do some more logging if required else skip
    }       
}
}

切入点execution("* com.x.y..*.*(..)")表示此建议应拦截com.x.y包及其子包中具有所有可见性的任何方法。

有关根据您的需求自定义切入点的更多示例,请参阅文档here