● 优点:Java标准库原生支持,使用简单,无需引用额外的包 。相对于静态AOP更灵活
● 缺点:带代理的类必须是接口,灵活性受到一些限制;使用反射会影响一些性能
动态代码字节生成【Android 工程师必知必会的“AOP知识”】在运行期,目标类加载后,动态构建字节码文件生成目标类的子类,将切面逻辑加入到子类中
CGLib是动态代码字节生成的实现,它封装字节码生成工具Asm,原理是在运行期间目标字节码加载后,生成目标类的子类,将切面逻辑加入到子类中,所以使用Cglib实现AOP不需要基于接口
● 优点:没有接口也可以织入,灵活性高
● 缺点:扩展类的实例方法为final时,则无法进行织入
自定义类加载器在运行前,目标加载前,将切面逻辑加到目标字节码中
可以考虑javassist来实现 。Javassist 是一个编辑字节码的框架,可以让你很简单地操作字节码;它可以在运行期定义或修改Class,使用Javassist实现AOP的原理是在字节码加载前直接修改需要切入的方法
● 优点:可以对绝大部分类织入
● 缺点:如果用到了其他类加载器,则这些类将不被织入

文章插图
知识剖析为什么要使用 Aop?● 为了方便,用了aop能让你少写很多代码
● 为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去想一些其他的事情,这些其他的事情包括:安全,事物,日志等
● 为了降低之前传统面向对象中采用纵向继承体系增强方法导致的耦合度过高的问题
● 提高了代码的复用性
AOP的思想● AOP的核心思想是帮助我们在扩展功能(方法)时可以不依靠修改源代码来实现
● 其采取横向抽取机制,规避了传统面向对象中纵向继承体系的重复性高耦合代码
浅析AOP思想的发展及原理发展:修改源代码————采用OOP纵向继承体系————采用AOP横向织入
实现原理:通过动态代理创建代理对象来实现,默认使用Java动态代理来创建AOP代理,当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理
Aop 可以说是spring的一大特色,主要应用场景有事物管理、权限、日志这几块用的比较多
结语技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉
PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下
推荐阅读
- 女人必知 6隐性坏男人需认清
- 不吃饭吃水果能减肥吗 减肥人士必知
- 苹果|苹果加大力度启用更多中国工程师:iPhone 14本地设计更稳了
- 如何做好机械设计工程师的职业生涯规划
- 如何成为一名优秀的电子工程师
- web前端工程师需要掌握哪些核心技能
- 机械工程师的职业规划与前景
- |男子被派去沙特做工程师,就因给同事做饭吃,结果让男子措手不及
- 测绘工程师的职责
- 新郎新娘必知的六大忌讳
