统一记录日志(AOP的使用)

AOP的概念

  • Aspect Oriented Programing

即面向方面(切面)编程

  • AOP是一种编程思想,是对OOP的补充,可以进一步提高编程的效率。

AOP的术语

统一记录日志(AOP的使用)

AOP的实现

  • AspectJ

AspectJ是语言级的实现,它扩展了Java语言,定义了AOP语法

AspectJ在编译期织入代码,它有一个专门的编译器,用来生成遵守Java字节码规范的class文件。

  • Spring AOP

Spring AOP使用纯Java实现,它不需要专门的编译过程,也不需要特殊的类装载器。

Spring AOP在运行时通过代理的方式织入代码,只支持方法;类型的连接点。

Spring支持AspectJ的集成。

package com.nowcoder.community.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class AlphaAspect {

    @Pointcut("execution(* com.nowcoder.community.service.*.*(..))")
    public void pointcut() {

    }

    @Before("pointcut()")
    public void before() {
        System.out.println("before");
    }

    @After("pointcut()")
    public void after() {
        System.out.println("after");
    }

    @AfterReturning("pointcut()")
    public void afterRetuning() {
        System.out.println("afterRetuning");
    }

    @AfterThrowing("pointcut()")
    public void afterThrowing() {
        System.out.println("afterThrowing");
    }

    @Around("pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("around before");
        Object obj = joinPoint.proceed();
        System.out.println("around after");
        return obj;
    }

}

上一篇:AOP


下一篇:Go语言之面向对象编程(三)