面向切面编程开发的实现方法
随着互联网的不断发展,程序员能够掌握的编程开发方式也在不断的增加,而今天我们就通过案例分析来了解一下,面向切面编程开发的实现方法。
面向切面的程序设计将代码逻辑切分为不同的模块(即关注点(Concern),一段特定的逻辑功能)。几乎所有的编程思想都涉及代码功能的分类,将各个关注点封装成独立的抽象模块(如函数、过程、模块、类以及方法等),后者又可供进一步实现、封装和重写。
1、元编程
很多语言都有内置类似这样一些“增强代码”的功能,
一般来说,从安全性和编译问题等角度考虑,大多数元编程都只允许新增代码,不允许修改。
这种都是编译器必须有才能做到。(没有的,你也可以自己写个编译器,只要你做的到)
当然元编程的概念不仅仅可以用来做类似AOP的事情
2、修改代码
代码文件修改
一般来说,很少有这样实现的,代码文件都改了,我们码农还怎么写bug呀。
中间语言修改
有很多语言编译的结果并不是直接的机器码,而是优化后的一个接近底层的中间层语言,方便扩展支持不同cpu,不同机器架构。
3、利用编译器或者运行时的功能
一般来说,也是利用编译器自身提供得扩展功能做扩展
java的AspectJ好像就可以利用了ajc编译器做事情
4、利用运行时功能
理论上dotnet也可以实现CLRProfilingAPI在JIT编译时修改methodbody。实现真正无任何限制的运行时静态AOP(不过貌似得用C++才能做CLRProfilingAPI,文档少,兼容貌似也挺难做的)
5、运行时
严格来说,运行时也是编译后不过不是再编织一次,而是每次运行都编织并且没有什么前中后了,
都是程序启动后,在具体类执行之前,把这个类编织了
比如java的类加载器:在目标类被装载到JVM时,通过一个特殊的类加载器,对目标类的字节码重新“增强。
具有aop功能的各类IOC容器在生成实例前创建代理实例
其实也可以在注册IOC容器时替换为代理类型