最近接触的几个工程中Lombok插件出现频率比较高,趁机了解一下原理。git
受益于JSR 269 API,程序能够在编译阶段对AST进行节点的操做,从而注入相关的功能结点,从而包含在最终的字节码文件里。github
Spring AOP的部分是否可使用JSR 269原理生成字节码,而不是运行时动态生成呢?
我认为是能够的,Spring的AOP是基于动态代理实现的,根据实际场景和具体配置不一样有JDK原生动态代理和Cglib两种不一样的实现。在Spring以前就已经有AOP的成熟实现了,并且也是在编译期使用字节码织入的方式,思路与lombok一致,那就是大名鼎鼎的AspectJ了,如今Spring中还沿用着它的AOP注解和语法。
不过AspectJ在JDK5就有了,那个时候JSR269还没出现,因此它并非使用这种方式实现的。
看了下AspectJ的使用,发现跟lombok同样,须要IDE支持,加强的部分要写一些代码。可是若是没有Spring的话,我很乐意使用AspectJ来实现AOP的使用,由于给代码开发维护带来的便利和灵活性很是高,整体而言,利大于弊。工具