面向切面编程
切面:就是在一个怎么样的环境中工作,数据库的事务直接贯穿了整个代码层面,这就是一个切面。它能够在被代理对象的方法之前,之后,产生异常或者正常返回后切入你的代码,甚至代替原来被代理对象的方法,在动态代理中可以把它理解为一个拦截器。
通知:切面开启后,切面的方法。
前置通知(before)
后置通知(after)
返回通知(afterReturning)
异常通知(afterThrowing)
环绕通知(aroundThrowing)
切点:
在动态代理中,被切面拦截的方法就是一个切点,切面可以将其切点和被拦截的方法按照一定的逻辑织入到约定流程中。
连接点
连接点是一个判断条件,由它可以指定哪些是切点。对于指定的切点,Spring会生成代理对象去使用对应的切面对其拦截,否则就不会拦截它。
织入
织入是一个生成动态代理的过程。
实际代理的方法分为静态代理和动态代理。静态代理是在编译class文件时生成的代码逻辑,但是在Spring中并不使用这样的方式。
而是运行期动态生成代理对象。
Spring中有4中方式实现AOP的拦截功能
使用ProxyFactoryBean和对应的接口实现AOP
使用XML配置AOP
使用@AspectJ注解驱动切面
使用AspectJ注入切面