学习java100多天和2天的记录----日志、AOP等等等等

AOP分为:

  切面类

  切入点

  织入方法

其中织入方法中可以添加参数JoinPoint joinPoint,这个参数很有意思,可以获得被织入方法的很多信息:

   getTarget()    获取被织入的类
        getSignatrue()    获取被织入的具体方法
        getArgs()    获取被织入的方法的 实参
 见下面示例,将添加日志的方法切入每个类中:

@Component
@Aspect
public class LogAspect {
    
   
    Logger logger = LoggerFactory.getLogger( LogAspect.class );
    
    @Pointcut("execution ( * com.dao..*.*(..))")
    public void pointCut(){}
    
    
    // 1) 引用上面定义的 切入点  value="pointCut()"
    // 2) 自定义切入点 value="execution(* com.dao..*.*(..))"
    @Before(value="pointCut()")
    public void logBefore( JoinPoint joinPoint ){
        // 开始记录日志
        
        // 记录???
        //   哪个类, 哪个方法 ,执行什么样的操作 , 有没有异常发生
        
        // 包名.类名
        String className = joinPoint.getTarget().getClass().getName() ;
        
        // joinPoint.getSignature().getDeclaringTypeName()
        
        // 方法名
        String methodName = joinPoint.getSignature().getName() ;
        
        // 调用 方法时 传入的 实参
//        for ( Object arg :  joinPoint.getArgs() ) {
//            System.out.println( arg );
//        }
        logger.warn("====================================================");
        logger.warn( "调用了 {} 中的 {} 方法 " , className , methodName );
        logger.warn( "以下为实参列表:" );
        for( int i=0 ; i< joinPoint.getArgs().length; i++ ) {
            logger.warn( "参数{} : {}" , i+1 , joinPoint.getArgs()[i] );
        }
    }
    
    @AfterReturning(value="pointCut()" , returning="returnObject")
    public void logAfterReturning ( Object returnObject ) {
        logger.warn( "方法的返回值是: {}" , returnObject );
        logger.warn("====================================================");
    }
    
    @AfterThrowing(value="pointCut()" , throwing="exception")
    public void logAfterThrowing( Exception exception ) {
        logger.warn( "方法发生了异常: {}" , exception.getMessage() );
        logger.warn("====================================================");
    }
    
}

猜你喜欢

转载自www.cnblogs.com/sunwenhao01/p/9890947.html