SpringBoot 整合SSM(六):关于异常和切面

异常和切面(AOP)的开发方式和注释没有任何区别。

异常,是写了异常处理的类,上面也标注好是处理哪个异常类

AOP的话,也是给标注上了对哪些包生效。


这里把这几个部分点一下

AOP

package com.ssm_login.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;//spring自带的日志框架
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;

@Aspect
@Component//将这个类引入spring容器中去
public class LoginAspect {

    private final static Logger logger = LoggerFactory.getLogger(LoginAspect.class);//参数为当前使用的类名

    @Pointcut("execution(public * *..LoginController.login(..))")//要处理的方法,包名+类名+方法名
    public void cut(){
    }

    @Before("cut()")//在调用上面 @Pointcut标注的方法前执行以下方法
    public void doBefore(JoinPoint joinPoint){//用于获取类方法
    	System.out.println("进入before");
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request =  attributes.getRequest();
        //url
        logger.info("url ={}",request.getRequestURI());
        //method
        logger.info("method={}",request.getMethod());
        //ip
        logger.info("ip={}",request.getRemoteAddr());
        //类方法
        logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+'.'+ joinPoint.getSignature().getName());//获取类名及类方法
        //参数
        logger.info("args={}",joinPoint.getArgs());
    }

    @After("cut()")//无论Controller中调用方法以何种方式结束,都会执行
    public void doAfter(){
        logger.info("----完成这次登录日志记录-------");
    }

    @AfterReturning(returning = "obj",pointcut = "cut()")//在调用上面 @Pointcut标注的方法后执行。用于获取返回值
    public void doAfterReturning(Object obj){
        logger.info("response={}",obj.toString());
    }
}

这个部分实现了日志的打印,在console中,需要把级别调到debug就能看到了。

异常类

package com.ssm_login.exception;

import org.springframework.web.servlet.HandlerInterceptor;

public class NoLoggingException extends Exception{

	public NoLoggingException() {
		super();
		// TODO 自动生成的构造函数存根
	}

	public NoLoggingException(String message) {
		super(message);
		// TODO 自动生成的构造函数存根
	}
	
}

SpringBoot 整合SSM(六):关于异常和切面_第1张图片
这里的话其实没什么难点。

你可能感兴趣的:(SpringBoot)