好好学习了一下,Hibernate 方面的书,温故而知新,可以为师亦.
我们如果使用用延迟加载实际上用的是Hibernate 中使用的代理类.它默认依赖 cglib 来实现.
Hibernate 中使用 CGLIB 和 javassist 来完成延迟加的.
CGLIB 如下:
依懒包:cglib-2.1.3.jar
首先定义一个供调用的接口:com.isw2.hibernate.test.interfaces.ITest.java
package com.isw2.hibernate.test.interfaces;
public interface ITest {
public void testFirst();
public void testSecond();
}
接着要定义一个拦截器:com.isw2.hibernate.test.TestITest.java
package com.isw2.hibernate.test;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* MethodInterceptor 是一个拦截器接口
* @author Administrator
*
*/
public class TestITest implements MethodInterceptor {
public Object intercept(Object object, Method method, Object[] objArr,
MethodProxy methodProxy) throws Throwable {
System.out.println("display" + method.getName());
return null;
}
}
这样就可以使用了.
public static void main(String[] args) {
//过滤器类
MethodInterceptor methodInterceptor = new TestITest();
Enhancer eh = new Enhancer();
//设置接口
eh.setSuperclass(ITest.class);
//设置调用过滤器
eh.setCallback(methodInterceptor);
//创建代理类
ITest test = (ITest) eh.create();
test.testFirst();
test.testSecond();
}
javassist执行的是字节码操作.相关如下:
依懒Jar 包:javassist.jar
首先建一个使用类com.isw2.bean.ButtBean.java
package com.isw2.bean;
public class ButtBean {
public void disPlay() {
System.out.println("ButtBean.disPlay");
}
}
javassist 的使用:
try {
//ClassPool 是CtClass 的工厂
//CtClass 类似于一个代理类,通过它获取代理类运行时内容
CtClass ctclass = ClassPool.getDefault().get(
"com.isw2.bean.ButtBean");
String oldMethod = "disPlay";
//CtMethod 代表 CtClass 中的方法.
CtMethod ctMethod = ctclass.getDeclaredMethod(oldMethod);
String newMehtod = oldMethod + "New";
ctMethod.setName(newMehtod);
CtMethod ctNewMethod = CtNewMethod.copy(ctMethod, oldMethod, ctclass, null);
StringBuffer sbuffer = new StringBuffer();
sbuffer.append("{\nSystem.out.println(\"ButtBean.disPlay "
+ "javassist help compile\");\n}");
ctNewMethod.setBody(sbuffer.toString());
ctclass.addMethod(ctNewMethod);
System.out.println("输出结果:");
// 这里要注意的是 BuffBean 必在这之前没有补JVM 加载,否则在这里会出错
ButtBean butt = (ButtBean) ctclass.toClass().newInstance();
butt.disPlay();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (CannotCompileException e2) {
e2.printStackTrace();
} catch (Exception e3) {
e3.printStackTrace();
}
相关的操作
http://blog.csdn.net/yadandan520_ya/archive/2009/03/04/3956867.aspx
http://brighter.iteye.com/blog/224629
都分别给了详细的操作说明.
在org.hibernate.cfg.Environment.buildBytecodeProvider 里,将 "cglib",改为 "javassist" 这样,Hibernate 就会使用 javassist 来生成代理对象了.
分享到:
相关推荐
《电子商务浅探(1).ppt》是对电子商务领域的深入探讨,主要涵盖了电子商务的定义、发展历程、主要经营模式以及其深远影响。以下是对这些知识点的详细解析: 1. 电子商务概述: 电子商务,简称电商,是一种利用...
高中历史知识结构浅探论文.doc
"浅探中国电子商务发展中的问题与对策" 本文主要探讨了中国电子商务发展中的问题和对策。首先,本文对中国电子商务发展现状进行了分析,指出电子商务是中国新兴的商业运营模式,近年来发展迅速,有着广阔的发展前景...
Visual C++中函数调用方式浅探 在 Visual C++ 中,函数调用方式是一个非常重要的概念。不同的函数调用方式会对程序的执行和性能产生影响。在 C 和 C++ 中,默认的函数调用方式是 C 式调用,也就是 __cdecl。除非...
### Visual C++中函数调用方式浅探 在Visual C++环境下进行软件开发时,了解不同的函数调用约定(calling conventions)对于优化程序性能、理解编译器行为以及避免潜在的错误至关重要。本文将深入探讨Visual C++中...
"Visual C++中函数调用方式浅探" Visual C++中函数调用方式浅探概述: 在Visual C++中,函数调用方式可以分为两种:C式调用和Pascal式调用。其中,C式调用是缺省的,除非特殊声明。在本文中,我们将详细探讨这两种...
1. 空中课堂定义:空中课堂是一种通过互联网实现的远程教学模式,学生和教师借助电脑、手机等终端设备,在虚拟空间中进行教学活动,打破传统课堂的时空限制。 2. 空中课堂的教学运行模式:空中课堂依赖于互联网授课...
在石油、天然气或地下水的勘探中,浅探井通常用于确定地质构造、地层特性以及资源的存在和可开采性。在IT技术的应用中,这可能涵盖了数据可视化、地理信息系统(GIS)和模拟软件的使用,以帮助工程师理解和预测钻井...
《GPS在公路测量中的应用浅探》这篇文章主要探讨了GPS技术在公路测量中的应用及其优势。GPS(全球定位系统)自20世纪70年代起发展至今,已成为一种高精度、全天候、多功能的定位导航系统,广泛应用于大地测量和工程...
"浅探中国电子商务发展中的问题与对策" 一、电子商务发展现状 电子商务是中国新兴的商业运营模式,近年来发展迅速,有着广阔的发展前景。电子商务的发展离不开互联网的发展,由于中国互联网用户的人数众多,因而...
微课程设计模式浅探
本文主要探讨了电力系统中的配电自动化及其管理。配电自动化是20世纪80年代末在发达国家兴起的技术,对于提升中国薄弱的配电网络的可靠性和效率具有重大意义。随着城网和农网的改造,变电站自动化和馈线自动化成为...
### JavaScript运行机制浅探 #### 一、引言 JavaScript是一种广泛应用于网页浏览器中的脚本语言,它在前端开发中的地位不可替代。由于其独特的运行机制,开发者常常遇到一些意料之外的行为。本文旨在深入探讨...
### Eclipse插件开发技术浅探 #### 一、引言 随着软件开发工具市场的多样化发展,各大软件公司如Borland、Microsoft、Oracle等推出了各自的产品。这些工具虽然丰富了软件开发领域,但也给开发人员带来了挑战,尤其...
### Delphi 的接口机制浅探 #### 接口的引用计数管理 接口在Delphi中扮演着极其重要的角色,特别是在实现诸如OpenTools API这样的功能时。为了更好地理解Delphi中的接口机制,我们首先需要深入了解接口的引用计数...
浅探89C55WD单片机在智能供电系统中的应用.pdf
浅探网上银行发展.doc
Delphi_的RTTI机制浅探.doc
人工智能技术,作为21世纪最前沿的三大尖端技术之一,在过去几年中发展迅速,并在互联网、交通、医疗、制造等领域得到了广泛应用。其关键组成包括专家系统、数据挖掘与分析技术、人机交互技术,以及知识和数据的智能...
Delphi_的消息机制浅探.doc