
在讲解AOP模块之前,首先我们来讲解一下cglib代理、以及怎么手动实现AOP编程
在讲解cglib之前,首先我们来回顾一下静态代理和动态代理….我之前就写过了静态代理、动态代理的博文(关注公众号Java3y获取)
由于静态代理需要实现目标对象的相同接口,那么可能会导致代理类会非常非常多….不好维护---->因此出现了动态代理
动态代理也有个约束:目标对象一定是要有接口的,没有接口就不能实现动态代理…..----->因此出现了cglib代理
cglib代理也叫子类代理,从内存中构建出一个子类来扩展目标对象的功能!
接下来我们就讲讲怎么写cglib代理:
使用cglib就是为了弥补动态代理的不足【动态代理的目标对象一定要实现接口】
AOP 面向切面的编程:
下面我们来看一段代码:
我们一步一步来分析,首先我们的UserDao有一个save()方法,每次都要开启事务和关闭事务
上面使用的是工厂静态方法来创建代理类对象。我们也使用一下非静态的工厂方法创建对象。
配置文件:先创建工厂,再创建代理类对象
Aop: aspect object programming 面向切面编程
关注点:
切面:
切入点:
切入点表达式:
AOP称为面向切面编程,那我们怎么理解面向切面编程??
我们可以先看看下面这段代码:
我们学Java面向对象的时候,如果代码重复了怎么办啊??可以分成下面几个步骤:
抽取成类的方式我们称之为:纵向抽取
但是,我们现在的办法不行:即使抽取成类还是会出现重复的代码,因为这些逻辑(开始、结束、提交事务)依附在我们业务类的方法逻辑中!
现在纵向抽取的方式不行了,AOP的理念:就是将分散在各个业务逻辑代码中相同的代码通过横向切割的方式抽取到一个独立的模块中!
上面的图也很清晰了,将重复性的逻辑代码横切出来其实很容易(我们简单可认为就是封装成一个类就好了),但我们要将这些被我们横切出来的逻辑代码融合到业务逻辑中,来完成和之前(没抽取前)一样的功能!这就是AOP首要解决的问题了!
有帮助?点赞!
关注我的公众号:Java3y,获取更多的原创笔记,海量视频资源/原创思维导图/学习路线
两年呕心沥血的文章导航:https://github.com/ZhongFuCheng3y/3y(欢迎star)
