在這個切入對象的基礎上
public static IDBQuery createCglibProxy(){
Enhancer enhancer = new Enhancer()
enhancer
//指定切入器
enhancer
//指定實現的接口
IDBQuery cglibProxy = (IDBQuery) enhancer
//生成代理類的實例
return cglibProxy;
}
使用Javassist生成動態代理可以使用兩種方式
public class JavassistDynDbQueryHandler implements MethodHandler {
IDBQuery real=null;
@Override
public Object invoke(Object arg
throws Throwable {
if(real==null)
real=new DBQuery()
return real
}
}
以這個Handler為基礎
public static IDBQuery createJavassistDynProxy() throws Exception {
ProxyFactory proxyFactory = new ProxyFactory()
proxyFactory
Class proxyClass = proxyFactory
IDBQuery javassistProxy = (IDBQuery) proxyClass
//設置Handler處理器
((ProxyObject) javassistProxy)
return javassistProxy;
}
Javassist使用動態Java代碼創建代理的過程和前文的方法略有不同
public static IDBQuery createJavassistBytecodeDynamicProxy() throws Exception {
ClassPool mPool = new ClassPool(true)
//定義類名
CtClass mCtc = mPool
BytecodeProxy
//需要實現的接口
mCtc
//添加構造函數
mCtc
//添加類的字段信息
mCtc
real;
String dbqueryname=DBQuery
//添加方法
mCtc
null)real=new
//基於以上信息
Class pc = mCtc
//生成動態類的實例
IDBQuery bytecodeProxy = (IDBQuery) pc
return bytecodeProxy;
}
返回目錄
編輯推薦
Java程序設計培訓視頻教程
J
J
Visual C++音頻/視頻技術開發與實戰
Oracle索引技術
ORACLE
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27831.html