AOP基本概念 Spring( 二 )

// @Before说明这是一个前置通知,log函数中是要前置执行的代码,JoinPoint是连接点,@Before("pointcut()")public void log(JoinPoint joinPoint) { }
(6) 织入(Weaving)织入是将切面和业务逻辑对象连接起来, 并创建通知代理的过程 。织入可以在编译时,类加载时和运行时完成 。在编译时进行织入就是静态代理,而在运行时进行织入则是动态代理 。
关键就是:切点定义了哪些连接点会得到通知
静态代理模式所谓静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强 。ApsectJ是静态代理的实现之一,也是最为流行的 。静态代理由于在编译时就生成了代理类,效率相比动态代理要高一些 。AspectJ可以单独使用,也可以和Spring结合使用 。
动态代理模式与静态代理不同,动态代理就是说AOP框架不会去修改编译时生成的字节码,而是在运行时在内存中生成一个AOP代理对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法 。
Spring AOP中的动态代理主要有两种方式:JDK动态代理和CGLIB动态代理 。
JDK代理通过反射来处理被代理的类,并且要求被代理类必须实现一个接口 。核心类是 InvocationHandler接口 和 Proxy类 。
而当目标类没有实现接口时,Spring AOP框架会使用CGLIB来动态代理目标类 。 
CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类 。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的 。核心类是 MethodInterceptor 接口和Enhancer 类
总结本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注趣讯吧的更多内容!