前面我们说过jdk代理和cglib代理了,研究表明,谁研究的我也不知道哈,
cglib所创建的动态代理对象的性能比jdk所创建的动态代理对象的性能高很多(10倍左右),但cglib在创建动态代理对象时所花费的时间比jdk要多(8倍),,所以对于单实例的代理对象或者具有实例池的代理对象,因为不需要频繁的创建代理对象,所以比较适用cglib动态代理对象;需要频繁的创建代理对象的,则适合用jdk动态代理对象。
spring两种技术都运用了。
增强:spring 适用它来创建横切逻辑(比如事务),spring只支持方法连接点,所以增强既包含了横切逻辑代码,也包含了连接点的部分信息(即在方法的哪一点加入横切代码--方位信息)。
spring的增强都实现了org.aopalliance.aop.Advice接口,支持5种类型的增强。
①org.springframework.aop.BeforeAdvice;
前置增强,org.springframework.aop.MethodBeforeAdvice是目前可以用的前置增强,意思是在目标类的方法前织入增强。
②org.springframework.aop.AfterReturningAdvice;
后置增强,意思是在目标方法执行后织入增强。
③org.springframework.aop.ThrowsAdvice;
抛出异常增强,意思是在目标抛出异常后织入增强。
④org.aopalliance.intercept.MethodInterceptor;
环绕增强,意思是在方法执行前后织入增强。
⑤org.springframework.aop.IntroductionInterceptor;
引介增强,意思是在目标类中添加新的方法或者属性。