spring ,hibernate 都是用到了asm字节码技术,请问它们具体都拿ASM来实现了什么功能?或者说在哪个功能上用到的

问题描述

spring ,hibernate 都是用到了asm字节码技术,请问它们具体都拿ASM来实现了什么功能?或者说在哪个功能上用到的 我们查看Spring,主要使用了cglib动态代理来实现一些IOC或者AOP功能,但是这个和ASM好像是没关系?还有hibernate,在做数据持久化的时候主要用的是反射,那它有拿ASM干了什么呢?

解决方案

动态代理,hibernate的懒加载使用到了asm,spring的AOP也使用到了。你建立一个hibernate映射对象并使用懒加载配置的时候,在内存中生成的对象使用的不再是你实现的那个类了,而是hibernate根据字节码技术已你的类为模板构造的一个新类,证明就是当你获得那个对象输出类名是,不是你自己生成的类名了。spring可能是proxy$xxx,hibernate可能是<你的类名>$xxx$xxx之类的名字。
解决方案二:
CGLIB是对ASM的封装,简化了ASM的操作,降低了ASM的使用门槛
解决方案三:
asm字节码增强技术主要是用来反射的时候提升性能的,如果单纯用jdk的反射调用,性能是非常低下的,而使用字节码增强技术后反射调用的时间已经基本可以与直接调用相当了

时间: 2025-01-28 09:20:06

spring ,hibernate 都是用到了asm字节码技术,请问它们具体都拿ASM来实现了什么功能?或者说在哪个功能上用到的的相关文章

字节码及ASM使用

字节码及ASM使用 什么是字节码? 机器码 机器码(machine code)是CPU可直接解读的指令.机器码与硬件等有关,不同的CPU架构支持的硬件码也不相同. 字节码 字节码(bytecode)是一种包含执行程序.由一序列 op 代码/数据对 组成的二进制文件.字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码.通常情况下它是已经经过编译,但与特定机器码无关.字节码主要为了实现特定软件运行和软件环境.与硬件环境无关. 字节码的实现方式是通过编译器和虚拟机器.编译器

spring hibernate jpa 用findAll的时候,取出的所有的string类型的字段都是空字符串

问题描述 spring hibernate jpa 用findAll的时候,取出的所有的string类型的字段都是空字符串 但数据库中是有值的,int值可以选出{""id"":18187no"":""""parent_id"":11654name"":""""route"":"""

java-关于spring+hibernate 注入sessionFactory为null的问题

问题描述 关于spring+hibernate 注入sessionFactory为null的问题 最近一个项目需要用到struts2+spring+hibernate组合框架,我在一点一点的做配置,但做到注入SessionFactory时,一直不成功,在网上搜的一些解决方案也都不适用.故在此发布,希望高手们不吝赐教.web.xml的配置为: <?xml version=""1.0"" encoding=""UTF-8""

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

JSF+Spring+Hibernate的实例讲解

js 使用JavaServer Faces(JSF).Spring Framework和Hibernate建立一个真实的Web应用程序内容概要使用JSF建立一个真实的Web应用程序不是没有意义的任务,这篇文章介绍了如何将JSF与Sping Framework和Hibernate集成,并且给出了使用这些技术建立这个真实的Web应用程序的最佳实践和设计指导 JavaServer Faces(JSF)技术是J2EE应用程序的一个新的用户接口框架,它非常适合基于MVC(Model-View-Contro

浅谈如何结合JDBC事务与Spring+Hibernate

问题:客户在其数据库操作过程中需要调用我们的工作流接口,这样就需要将我们的工作流操作与他 们的业 务操作置于同一个事务中.我们的服务采用的都是spring的声明式事务,而客户采用的是对 connection进行事务处理. 如何保证JDBC事务的一致性? 想到的解决方案一:使用jta事务,用tomcat+jotm提供事务管理器.为什么一开始就想到要使用jta事 务??实际上我们和客户都是使用的同一个数据库,为了方便,各自使用了不同的数据库连接方式,使用 jta的话确实有bt的意思在里面.但是事实上

spring+hibernate避免延迟加载异常

在hibernate中,延迟加载是1个非常大的优点,但有时候却给我们带来一些小麻烦,在后台查询结束后,session已经关闭,但在前台显示的时候,如果存在关联关系就会产生延迟加载异常. 解决办法是客户端每次请求就分配1个session,将请求结果返回给客户端,并完成展现后关闭session. 实现这个功能非常简单,在web.xml中加入以下配置 <filter> <filter-name>hibernateFilter</filter-name> <filter-

Spring+Hibernate乱码解决方案

今天用spring+hibernate进行中文插入时出现乱码问题,通过查资料和自己反复测试终于解决了. 总结了两种方法: 1.使用gb2312编码,变更mysql的数据库编码字符集.cmd模式下用mysql --default-character-set=gb2312 -u root -p进入,然后再每个建表语句后增加default character set gb2312; 重新建立数据表. 值得注意的地方是:applicationContext.xml中的数据库连接必须设置为<propert

Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏

/** *作者:张荣华 *日期:2008-02-05 **/ 前言,这篇文章写于08年12月份,现在发布出来望同行点评 ------------------------------------------------------------ 本文将要阐述或者讨论的是spring+hibernate和mysql的master-slave模式之间的一些不得不说的故事. 那么开始之前,按照惯例,我们要介绍一下这个两个东西 1,Hibernate,按照惯例,我们不介绍大家都知道的东西. 2, Maste