什么叫面向切面编程?看了一些文章,不知是文章没说清楚还是我没理解清楚,看了还是不知道它有什么用和怎么用,请大佬再给说道说道。
就像springboot
中AOP
的做法
比如现在我有一个Web项目 现在我想在用户请求每个路径的时候 都打个log.info
现在我的做法是在每个方法中都加入 log.info("..")
这样工作量非常大
或者我把@RequestMapping()
作为一个切点, 写一段代码, 切入其中, 不用改变原来的代码, 实现代码复用, 降低了各个业务逻辑之间的耦合度
想像有各个功能模块, 一层一层的摆放, 数据从上往下传输, 功能相同的模块放在相同一层, 现在我做了一张很薄的切面, 插入层与层之间的缝隙, 在不需要的时候随时拔出
埋点/打桩/插眼,就这么简单理解就行,
把类似的点看成面,就是aop,比如我在野区插了一排眼,对面寡妇就不敢过来,那这排眼就好比是一面墙;
记录日志我可以在每个方法中埋点输出,但也可以反射将记录日志的代码注入到这些方法里面(其实是代理),这样可以造出一个非侵入式埋点的轮子出来,比如说spring aop
大概说说我的理解
1.oop的所有需要的类都在编译前已经写好了,运行的时候代码已经不能动了。
2.aop是指在编译期间,运行期间,动态的生成代码放到你的类里面。
打个比方(指出区别而已)
总之就是创建一个可以生成代码的代码段叫做切面,创建一个可以被切入代码的代码段叫做切点。合起来就叫面向切面了
优点:代码更加简洁,如果再加上时间的控制就会变得更加灵活。
缺点:我认为呢现在还不太成熟,aop如果没有一个严谨的规范的话,可读性会很差,而且难以维护。