
代理就是帮助去做一件事 生活中你应该听过代理人 吧, 和Java中的代理含义是一样的。
比方说 你要记录日志, 在常规开发中,日志的记录 不属于业务的一部分。 但是我们又希望记录业务日志 第一个我们想到的就是 在业务层写日志,理论上是没问题的,实际也没问题。但是却产生了麻烦
如果后期维护的时候,别人看代码的时候就会找不到那句是业务,那句是日志,造成维护麻烦。这只是其中一点 而Java有2个很重要的特性, 各司其职和独立性 ,这就要求了 日志 和业务,应该分别处理,而不应该混淆在一起。 于是就有人提出了代理的概念, 代替业务 *** 作类去在 *** 作的业务的时候去记录日志 。
Spring的AOP有两种动态代理方式,其中一种就是前面讲到的Feign采用的方式:JDK动态代理。在Spring中通过JdkDynamicAopProxy实现。它有两个特点
实现InvocationHandler接口,接管invoke方法实现自己的业务逻辑,所有调用都会被传递到InvocationHandler的invoke方法,通过ProxynewProxyInstance获取动态代理对象
被代理的对象必须实现了某个接口,不能代理无接口的类。
Spring还有一种动态代理的方式,那就是CGLIB,它并不强制代理类实现某个接口。在实际使用中,CGLIB在代理对象的性能方面比JDKDynamic要快很多,但是在创建代理对象上的时间花费也相当长。所以,如果你的类并没有实现接口,或者是单例模式的类不需要重复创建,建议使用CGLIB的方式。
小结
以上就是关于什么是spring代理类全部的内容,包括:什么是spring代理类、SpringCloud系列之Feign-4.Feign的动态代理、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)