AOP的一些简单用法

JAVA: 面向对象编程
面向对象有很多对象,每个对象有很多法,而我们每做的一个动作都是一个方法.

面向对象关注的是将需求功能垂直划分为不同的并且相对独立的,会封装好很好的类 并且有属于他们自己的行为.
AOP技术 :利用的是一种横切的技术,将面向对象构建的庞大的类的体系进行水平的切割,并且会将那些影响到多个类的公共行为封装成一个可重用的模块,这个模块称之为切面,所以AOP叫做面向切面编程
关键思想: 将能用的逻辑从业务逻辑中分离出来
附上一些简单的代码:

private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
@Before("execution(public * com.imooc.controller.BuyerProductController.*(..))")//拦截BuyerProductController下所有的方法
public void beforeLogAllMethod() {
    //System.out.println("Before-HttpAspect: 拦截所有方法");
    logger.info("Before-HttpAspect: 拦截所有方法");
}
@After("execution(public * com.imooc.controller.BuyerProductController.*(..))")//拦截BuyerProductController下所有的方法
public void afterLog() {
    //System.out.println("After-HttpAspect: 拦截所有方法");
    logger.info("After-HttpAspect: 拦截所有方法");
}
//以上方法比较Low重复的比较多 优化二个
@Pointcut("execution(public * com.imooc.controller.BuyerProductController.list(..))")//寻找切入点
public void log() {
}
@Before("log()")//拦截list()方法  before 在方法执行之前
public void beforeLog1() {
    //System.out.println("Before-HttpAspect: 拦截list()方法");
    logger.info("Before-HttpAspect: 拦截list()方法");
}
@After("log()")//拦截list()方法  after 在方法执行之后
public void afterLogAllMethod1() {
    //System.out.println("After-HttpAspect: 拦截list()方法");
    logger.info("After-HttpAspect: 拦截list()方法");
}
@Before("log()")
public void beforeRequestInfo(JoinPoint joinPoint) {//获取方法里的内容
    ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = requestAttributes.getRequest();
    //url
    logger.info("url :{}", request.getRequestURL());
    //mehtod
    logger.info("mehtod :{}", request.getMethod());
    //ip
    logger.info("ip :{}", request.getRemoteAddr());
    //类方法
    logger.info("class_method :{}", joinPoint.getSignature().getDeclaringTypeName() + "...." + joinPoint.getSignature().getName());
    //参数
    logger.info("args :{}", joinPoint.getArgs());
}
@AfterReturning(returning = "object", pointcut = "log()")//获取返回的内容
public void doAfterReturning(Object object) {
    logger.info("response: {}", object);
}

猜你喜欢

转载自blog.csdn.net/qq_35651451/article/details/79413931