Spring系列之 (十一):AOP实现方式:动态代理的两个方式(JDK和Cglib)
2018-03-22 13:32
861 查看
JDK动态代理:接口+实现类cglib字节码增强实现类:为了更好的理解spring的AOP技术,我们应该手动编写以上两种实现动态代理的方法,然后才能体会到spring实现AOP技术所带来的便利。 2.1、JDK动态代理。 要使用JDK动态代理的类,必须要有接口。这是前提条件。
1.编写UserService接口和UserServiceImpl。
2.创建代理类的工厂proxyFactory
3.增强代码的类
4.测试testApp
测试结果 成功增强了userServiceImpl对象的add方法。如果别的类有需要被增强的方法,那么同样通过创建工厂代理就可以拿到对应的代理对象。然后进行加强
2.2、cglib动态代理被代理的对象不需要在实现接口,要求就放松了很多。很多时候都采用cglib来进行动态代理。 需要导入两个jar包
spring已经将cglib和asm整合到了spring-core-3.2.0.jar中,所以我们导入spring的jar包就不需要在重复导这两个包了。 跟JDK动态代理的编写流程是一样的 1.UserServiceImpl。没有接口了
2.增强方法的类
3.创建代理的工厂(和jdk动态代理有区别)
成功增强方法。注意:CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑,所以 说被代理的类不能有final关键字
1.编写UserService接口和UserServiceImpl。
2.创建代理类的工厂proxyFactory
3.增强代码的类
4.测试testApp
测试结果 成功增强了userServiceImpl对象的add方法。如果别的类有需要被增强的方法,那么同样通过创建工厂代理就可以拿到对应的代理对象。然后进行加强
2.2、cglib动态代理被代理的对象不需要在实现接口,要求就放松了很多。很多时候都采用cglib来进行动态代理。 需要导入两个jar包
spring已经将cglib和asm整合到了spring-core-3.2.0.jar中,所以我们导入spring的jar包就不需要在重复导这两个包了。 跟JDK动态代理的编写流程是一样的 1.UserServiceImpl。没有接口了
2.增强方法的类
3.创建代理的工厂(和jdk动态代理有区别)
成功增强方法。注意:CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑,所以 说被代理的类不能有final关键字
相关文章推荐
- Spring中AOP实现的两种方式之JDK和cglib的动态代理
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- Spring中AOP实现的两种方式之JDK和cglib的动态代理
- spring02 注解方式实现MVC、spring的继承、代理模式(静/动) :jdk动态代理,cglib动态代理
- Spring(十)通过动态代理(JDK的Proxy)和cglib实现AOP技术
- spring(AOP)静态代理、JDK动态代理、cglib实现代理
- spring对AOP的支持(JDK的动态代理实现AOP和CGLIB实现AOP)
- Spring AOP之---基于JDK动态代理和CGLib动态代理的AOP实现
- Spring AOP实现方式 - JDK动态代理和CGLIB动态代理
- 静态代理、JDK动态代理、CGLIB动态代理、Spring实现AOP、IOC+AOP
- Spring AOP的底层实现技术---JDK动态代理
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- JDK和CGLib两种方式实现动态代理模式
- 实现动态代理的两种方式介绍+例子demo(JDK、CGlib)
- Spring AOP动态代理原理与实现方式
- spring对AOP的支持 JDK动态代理和CGLIB的区别
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务
- 利用动态代理实现AOP的简单示例(JDK和cglib分别实现)
- Spring AOP的底层实现技术---JDK动态代理