JDK和CGLIB
我们先了解一下Spring AOP织入的概念
- 织入:是一个生成动态代理对象并且将切面和目标对象方法变成成为约定流程的过程。
对于流程上的通知,之前我们都采用接口+实现类的模式,这时Spring推荐的方式。但是对于是否拥有接口则不是Spring AOP的强制要求。
对于动态代理也有很多实现方法,JDK动态代理只是其中的一种,业界比较流行的还有CGLIB、Javassit、ASM等。
Spring采用了JDK和CGLIB实现动态代理
对于JDK而言,它是要求被代理的目标对象必须拥有接口,而对于CGLIB则不做要求。因此在默认情况下,Spring会按照这样的一条规则处理,即当你需要使用AOP的类拥有接口时,它会以JDK动态代理运行,否则以CGLIB运行。