0

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

我的查询是:我需要为我的ApplicationContext中的每个类创建bean还是可以在包级别上概括它。如果我的包中有30个类,我应该在我的AppContext中创建30个bean,而如果可能的话,我宁愿在包级别创建它。请在这方面帮助我。

回答

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以获取更多示例来根据您的需要定制您的切入点。

+1

即使我不同意但不得不遵循,我没有使用aspectj的一些愚蠢的理由。 – Atom

+0

多数民众赞成在不好:(希望我可以帮你在这里...祝你好运! –