AOP的概念
- Aspect?Oriented?Programing
即面向方面(切面)编程
- AOP是一种编程思想,是对OOP的补充,可以进一步提高编程的效率。
AOP的术语
AOP的实现
AspectJ是语言级的实现,它扩展了Java语言,定义了AOP语法
AspectJ在编译期织入代码,它有一个专门的编译器,用来生成遵守Java字节码规范的class文件。
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;
}
}
|