除了以上两种能够动态生成代理class文件外,其实还有一种 不怎么被人谈起的java自身实现的代理
就是java的 Instrumentation(翻译过来就是调琴的意思)
有了这个以后编码人员可以构建一个独立于应用程序的代理程序,用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控,和 Java 类操作了,这样的特性实际上提供了 一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了
我们做一件事是为了实现某个目的
比如说我们所有业务逻辑都已经写好,这个时候需要在每个业务方法逻辑执行前加入权限校验
这里有两种方式:
一种是比较繁琐的每个地方都加
第二种是每个类都生成动态代理,在执行业务方法前切入动态代理的权限校验逻辑即可,这就实现了一个动态切入,而且原来的业务逻辑都不需要改动
由此,我们扩展思考,假如加入日志,事务是不是也可以呢?答案是肯定的,这就是AOP
不妨回顾spring的织入
我们写好两段两段代码后,在配置文件中配置在业务方法前后,之后由spring动态给我们生成这个类的代理类,那么那两段代码就被织入