你们都知道spring最大的特色就IOC和AOP,IOC是最经常使用的注入,就是被注入的类上加@Component注解,在须要用到时候,经过 @Autowired注入,不用每次都
new
出来。固然为了分清层级,@Component一般使用@Repository、@Service、@Controller代替。
本文只要记录AOP的用法,以springboot框架为例。spring
我的理解AOP就是拦截器,(多是我理解不全面,反正我如今就认为它是拦截器,拦截器!拦截器!只不过娶个英文名字而已)。
功能:AOP能够在作某些事情以前或以后强塞一些操做。数组
我知道的有两种实现方法,路径切入和注解切入,区别在于切点,二者各有利弊,前者适合批量切入,后者比较灵活,加注解的类才会被切。springboot
一、经过路径切入
二、经过注解切入框架
一、新建切面类上面加俩注解 @Aspect @Component 缺一不可
二、@Pointcut写上要切入的包,也能够精确到类
三、@Before切入点以前要处理的业务
四、@After切入点以后要处理的业务code
@Aspect @Component public class VisitAop { @Pointcut("execution(public * com.forum.controller.*.*(..))") public void log() { } @Before("log()") public void doBefore(JoinPoint joinPoint) { ........ } @After("log()") public void doAfter() { ........ } }
一、自定义注解
二、切入类@Aspect @Component 缺一不可
三、@Pointcut写上要切入注解(意思是带此注解者,必切!)
四、@Before、@After同上。get
一、自定义注解
1.1 @Target和@Retention定义自定义注解,无需其余,标识做用的注解。同步
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface VisitCount { }
三、切入点
3.1和路径切入的区别在此博客
@Pointcut("@annotation(com.Annotation.VisitCount)")
此外能够了解一些doBefore(),的参数JoinPoint,以便操做业务;it
一、joinPoint.getSignature().getDeclaringType().getSimpleName(),切入的类名
二、joinPoint.getArgs(),切入方法的参数数组
三、joinPoint.getSignature().getName(),切入方法名io
个人博客即将同步至腾讯云+社区,邀请你们一同入驻:https://cloud.tencent.com/dev...