今天我决定复习一下sprongAop,以便加深印象,在这里做个笔记并为大家展示参考学习。
如有不足之处,请指正。
在复习AOP之前,我决定先复习一下java静态代理。
静态代理设计模式:
1、为什么需要代理模式?
DAO ---> Service --> Controller
在javaEE开发中,最为重要的是Service层。
Service层中包含了 核心功能(几十行或者上百行代码)和 额外功能(附加功能)。
核心功能 = 业务运算 + DAO调用
额外功能 = 事务、日志、性能分析等...
额外功能书写在Service层中好不好?
Service层的调⽤者(Controller) 的⻆度来说: 需要在Service层书写额外功能。
软件设计者:Service层不需要额外功能
那我们如何解决? 理论是枯燥的,那我们直接上代码
开发环境: IDEA + jdk8
我们先创建一个接口 User,以自身为例:
我只会吃,所以我有一个方法:
那就是吃!
然后有一个人 (UserImpl) 继承了我(莫非是我失散多年的儿子?)
他居然也只会吃,而且吃得很多
然后有一天,他发现吃完饭后拉肚子,苦思冥想,莫非是饭前没洗手的问题?
他决定在吃饭前洗手!
我们不考虑代理的情况下,可以这样写:
但是! 问题来了,我们居然修改了核心功能的代码!
这是万万不可的,在我们的代理设计模式下不能这么做,因为如果我们需要 解耦合!这事就需要我们的 静态代理 出场了(当当当)...
我们先注释掉洗手的代码
那我们应该如何增加 静态代理 呢?
我们在创建一个类 UserProxy 实现了 接口 User
如何通过静态代理:(如下)
这样写有什么好处呢?
答案是: 不用修改原来的代码!
接下来我们使用 Junit 单元测试 测试此功能(如果没学过可以新建类 使用 main 进行测试)
嗯,好像到这里就结束了。这 就是静态代理,还是比较容易理解的。
那么静态代理存在什么问题呢?
1. 静态类⽂件数量过多,不利于项⽬管理
2. 额外功能维护性差 代理类中 额外功能修改复杂(麻烦)
那么接下来我就会带大家在学习(复习)下个章节(动态代理!)