Aop是面向切面编程:是通过预编译方式和运行器动态代理实现程序功能的统一维护技术。Aop是oop的延续,是spring框架中的重要内容,是函数编程的一种衍生泛型,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑部分之间的耦合度降低提高程序的可重用行,提高开发的效率。
Aop的作用是:
在程序运行期间,在不修改源码的情况下对方法进行功能性增强。
优势:减少重复代码,提高开发效率,并且便于维护。
Aop的底层实现:
Aop的底层是使用Spring提供的动态代理技术实现的,在运行期间,Spring通过动态代理的技术动态的生成代理对象,代理方法的执行时进行增强功能的介入,再去调用目标对象的方法,从而实现功能的增强。
常用的动态代理:
jdk代理,基于接口,具有局限性,需要增强的对象必须要用接口。cglib:基于父类的动态代理技术,不需要接口,限制小很多。
动态代理
动态代理技术原理:动态代理是依赖于动态代理对象来实现功能增强
使用JDK动态代理就相当于spring框架在创建一个接口的实现类成为目标类的兄弟类,那么就相当于目标类中的方法代理类中就有什么方法然后就可以通过代理类实现功能的增强。【目标类中自定义的方法不能进行增强】
使用cglib动态代理:就相当于spring创建目标类的一个子类,那么父类拥有什么功能子类就有什么功能,然后在基于子类进行功能增强。
jdk动态代理的的代码实现:
cglib实现动态代理对象:
Chlib是第三方技术,但是spring框架已经集成了这个第三方技术。
需要增强的类:
public class Target {
public void save(){
System.out.println("save runner.");
}
public void save2(){
System.out.println("sdjsds");
}
}
增强类代码:
public class Advice {
public void brfor(){
System.out.println("前置增强方法");
}
public void after(){
System.out.println("后置增强");
}
}
动态代理的实现:
public class ProxyTest {
public static void main(String[] args) {
//目标对象
final Target target =new Target();
//增强对象
final Advice advice=new Advice();
//返回值是动态代理的对象,基于cglib
//创建增强器