众所周知AOP(Aspect Oriented Programming)是Spring的核心之一,是OOP面向对象编程的延续和补充,是面向切面编程,他的底层实现是代理模式,简单来说,代理模式分为静态代理模式和动态代理模式,而代理模式又分为JDK动态代理和CGLib代理,AOP则是基于动态代理实现,默认是使用JDK动态代理,若没有接口则会使用CGLib代理,前者基于接口,后者基于子类,若兴趣深入了解代理模式的,可参考 Java代理模式 一文,下面简单说下AOP的基本概念.
先贴代码
以上案例是使用注解的方式用AOP实现的登录拦截,发起请求需要带token的请求头,若不带token的请求头,就会被拦截,提示当前未登录. 程序运行结果
1.不带token请求
2.带token请求
以上是使用注解的方式实现AOP,AOP也可用Execution表达式实现,注解方式适合切割较为分散的,如果一大片还是需要用Excution表达式来实现.,有兴趣,可自行实现.
分享在写案列时候的一个Java的坑
在判断请求头时,最先使用了java中的isEmpty()判空方法,结果异常的时候直接报500,不抛出定义的异常信息,最后发现,Java的isEmpty()方法判断是length长度,而判断的值可能是null.
isEmpty()方法的源码