当前位置: 首页 > news >正文

淄博网站建设优化公司win2008r2 iis配置网站

淄博网站建设优化公司,win2008r2 iis配置网站,厦门网站个人制作,wordpress菜单没有了Java实现动态代理的两种方式 JDK动态代理#xff1a;Java.lang.reflect 包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。Cglib动态代理#xff1a;Cglib (Code Generation Library )是一个第三方代码生成类库#xff0c;运行时在内存中动态生成一个子类对…Java实现动态代理的两种方式 JDK动态代理Java.lang.reflect 包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。Cglib动态代理Cglib (Code Generation Library )是一个第三方代码生成类库运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展。 两种动态代理的区别 JDK 的动态代理是基于接口的代理。 它要求被代理的类必须实现一个或多个接口。在运行时JDK 动态代理会根据被代理类实现的接口生成一个代理对象该代理对象实现了被代理类的接口并将方法的调用转发给真正的被代理类。JDK 动态代理的优点是简单易用缺点是只能代理实现了接口的类。 CGLIB 是基于继承的代理。 它可以代理没有实现任何接口的类。在运行时CGLIB 会动态生成一个被代理类的子类Cglib包的底层是通过使用一个小而快的字节码处理框架ASM来转换字节码并生成新的类。不鼓励直接使用ASM因为它需要你对JVM内部结构包括class文件的格式和指令集都很熟悉。并重写父类中的方法从而实现代理功能。CGLIB 的优点是可以代理没有实现接口的类缺点是生成的代理类需要继承被代理类并且无法代理 final 类型的方法。它可以在运行期扩展Java类与实现Java接口。它广泛的被许多AOP的框架使用例如Spring AOP和dynaop为他们提供方法的interception拦截。 总结 使用JDK动态代理的对象必须实现一个或多个接口而使用cglib代理的对象则无需实现接口达到代理类无侵入。 JDK 的动态代理和 CGLIB 都有各自的优点和缺点具体使用哪种方式取决于具体的需求和场景。如果被代理的类已经实现了接口那么可以优先考虑使用 JDK 的动态代理如果被代理的类没有实现接口或者需要对类的所有方法进行代理那么可以考虑使用 CGLIB。 补充 静态代理和动态代理的区别 最大的区别就是静态代理是编译期确定的但是动态代理却是运行期确定的。 同时使用静态代理模式需要程序员手写很多代码这个过程是比较浪费时间和精力的。一旦需要代理的类中方法比较多或者需要同时代理多个对象的时候这无疑会增加很大的复杂度。 反射是动态代理的实现方式之一。 动态代理的用途 Java的动态代理在日常开发中可能并不经常使用但是并不代表他不重要。Java的动态代理的最主要的用途就是应用在各种框架中。因为使用动态代理可以很方便的运行期生成代理类通过代理类可以做很多事情比如AOP比如过滤器、拦截器等。 在我们平时使用的框架中像servlet的filter、包括spring提供的aop以及struts2的拦截器都使用了动态代理功能。我们日常看到的mybatis分页插件以及日志拦截、事务拦截、权限拦截这些几乎全部由动态代理的身影。 Spring AOP的实现方式 Spring AOP中的动态代理主要有两种方式JDK动态代理和CGLIB动态代理。 JDK动态代理通过反射来接收被代理的类并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。 如果目标类没有实现接口那么Spring AOP会选择使用CGLIB来动态代理目标类。 CGLIBCode Generation Library是一个代码生成的类库可以在运行时动态的生成某个类的子类注意CGLIB是通过继承的方式做的动态代理因此如果某个类被标记为final那么它是无法使用CGLIB做动态代理的。 JDK 动态代理代码示例 public class UserServiceImpl implements UserService {Overridepublic void add() {// TODO Auto-generated method stubSystem.out.println(--------------------add----------------------);} }public class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) {super();this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 在方法调用前进行性能监控PerformanceMonior.begin(target.getClass().getName().method.getName());// 通过反射调用目标对象的方法Object result method.invoke(target, args);// 在方法调用后结束性能监控PerformanceMonior.end();return result;}public Object getProxy(){return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this);} }public static void main(String[] args) {UserService service new UserServiceImpl();MyInvocationHandler handler new MyInvocationHandler(service);UserService proxy (UserService) handler.getProxy();proxy.add(); }代码整体解读 说人话就是我们通过jdk的动态代理对用户服务的新增用户方法追加了一个性能监控功能通过传入原对象,得到代理对象传入原对象我拦截开启性能监控功能我再把方法的调用转发本质就是反射机制调用给原对象原对象方法执行结束我结束性能监控。 Cglib动态代理代码示例 public class UserServiceImpl implements UserService {Overridepublic void add() {// TODO Auto-generated method stubSystem.out.println(--------------------add----------------------);} }public class CglibProxy implements MethodInterceptor {private Enhancer enhancer new Enhancer();public Object getProxy(Class clazz) {// 设置需要创建子类的类enhancer.setSuperclass(clazz);enhancer.setCallback(this);// 通过字节码技术动态创建子类实例return enhancer.create();}// 实现MethodInterceptor接口方法public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {System.out.println(前置代理);// 通过代理类调用父类中的方法Object result proxy.invokeSuper(obj, args);System.out.println(后置代理);return result;} }public class DoCGLib {public static void main(String[] args) {CglibProxy proxy new CglibProxy();// 通过生成子类的方式创建代理类UserServiceImpl proxyImp (UserServiceImpl)proxy.getProxy(UserServiceImpl.class);proxyImp.add();} }
http://www.zqtcl.cn/news/277114/

相关文章:

  • 温州市城乡建设厅网站首页有没有做网站的多少钱
  • 网站建设实训报告建议缘震网络网站建设之f套餐
  • 网上免费注册qq网站wordpress怎么发布网站
  • 网站没有根目录国内互联网建站公司排名
  • 做网站需要架构师吗鞍山贴吧最新消息
  • 大连网站关键词推广网站建设合同报价
  • 网站维护费用一年多少广州h5网站建设
  • 如何搭建静态网站源码手机开发软件app的工具
  • 之前做的网站推广怎么删除专业做网站官网
  • 泉州做 php 网站宁波信息港
  • 网站建设专员招聘如何建立网站会员系统
  • 佛山网站关键词自助建站教程
  • 海口网站seo做网站域名后缀选择
  • 网站建设新手看什么书网络营销推广师
  • 小浣熊做单网站观看床做视频网站
  • 网站版面布局结构图门户网站要求
  • 网站左侧广告代码网站建设交接协议书
  • dedecms网站上传华为网络营销案例分析
  • wordpress搭建站点龙岗网站建设代理商
  • 做销售网站要多少钱建立网站的流程
  • 视频类网站如何做缓存网页设计框架怎么写
  • wordpress建站访问提示不安全网页加速器哪个最好用
  • 网博士自助建站系统下载毕业设计代做网站唯一
  • 江西网站建设优化服务营销软文范例大全100字
  • 图片类网站怎样做高并发专业做旗袍花的网站是什么网站
  • 我要建网站需要什么专业网站制作全包
  • 网站开发合同印花税自定义手机网站建设
  • 营销型网站开发流程制作网站需要钱吗
  • 提供有经验的网站建设百度识图识别
  • html手机网站怎么做湖南关键词优化品牌推荐