jdk动态服务和cglib静态代理版权声明
原创

2、CountImpl.java
-
package net.battier.dao.impl; -
import net.battier.dao.Count; -
/** -
* 委托类(包含业务逻辑) -
* -
* @author Administrator -
* -
*/ -
public class CountImpl implements Count { -
@Override -
public void queryCount() { -
System.out.println("查看帐户方法..."); -
} -
@Override -
public void updateCount() { -
System.out.println("修改帐户方法..."); -
} -
} -
、CountProxy.java -
package net.battier.dao.impl; -
import net.battier.dao.Count; -
/** -
* 这是一个代理类(增强型CountImpl实现类) -
* -
* @author Administrator -
* -
*/ -
public class CountProxy implements Count { -
private CountImpl countImpl; -
/** -
* 重写默认构造函数 -
* -
* @param countImpl -
*/ -
public CountProxy(CountImpl countImpl) { -
this.countImpl = countImpl; -
} -
@Override -
public void queryCount() { -
System.out.println("交易前"); -
// 调用委托类的方法; -
countImpl.queryCount(); -
System.out.println("交易后"); -
} -
@Override -
public void updateCount() { -
System.out.println("交易前"); -
// 调用委托类的方法; -
countImpl.updateCount(); -
System.out.println("交易后"); -
} -
}
3、TestCount.java
-
package net.battier.test; -
import net.battier.dao.impl.CountImpl; -
import net.battier.dao.impl.CountProxy; -
/** -
*测试Count类 -
* -
* @author Administrator -
* -
*/ -
public class TestCount { -
public static void main(String[] args) { -
CountImpl countImpl = new CountImpl(); -
CountProxy countProxy = new CountProxy(countImpl); -
countProxy.updateCount(); -
countProxy.queryCount(); -
} -
}



-
package net.battier.dao.impl; -
import net.battier.dao.BookFacade; -
public class BookFacadeImpl implements BookFacade { -
@Override -
public void addBook() { -
System.out.println("增加书本方法。。。"); -
} -
} -
、BookFacadeProxy.java -
package net.battier.proxy; -
import java.lang.reflect.InvocationHandler; -
import java.lang.reflect.Method; -
import java.lang.reflect.Proxy; -
/** -
* JDK动态代理代理类 -
* -
* @author student -
* -
*/ -
public class BookFacadeProxy implements InvocationHandler { -
private Object target; -
/** -
* 绑定委托对象并返回代理类 -
* @param target -
* @return -
*/ -
public Object bind(Object target) { -
this.target = target; -
//获取代理对象 -
return Proxy.newProxyInstance(target.getClass().getClassLoader(), -
target.getClass().getInterfaces(), this); //绑定接口(这是一个缺陷,cglib弥补这个缺点) -
} -
@Override -
/** -
* 调用方法 -
*/ -
public Object invoke(Object proxy, Method method, Object[] args) -
throws Throwable { -
Object result=null; -
System.out.println("事物开始"); -
//执行方法 -
result=method.invoke(target, args); -
System.out.println("事物结束"); -
return result; -
} -
}



3、BookFacadeProxy.java
-
package net.battier.proxy; -
import java.lang.reflect.Method; -
import net.sf.cglib.proxy.Enhancer; -
import net.sf.cglib.proxy.MethodInterceptor; -
import net.sf.cglib.proxy.MethodProxy; -
/** -
* 使用cglib动态代理 -
* -
* @author student -
* -
*/ -
public class BookFacadeCglib implements MethodInterceptor { -
private Object target; -
/** -
* 创建代理对象 -
* -
* @param target -
* @return -
*/ -
public Object getInstance(Object target) { -
this.target = target; -
Enhancer enhancer = new Enhancer(); -
enhancer.setSuperclass(this.target.getClass()); -
// 回调方法 -
enhancer.setCallback(this); -
// 创建代理对象 -
return enhancer.create(); -
} -
@Override -
// 回调方法 -
public Object intercept(Object obj, Method method, Object[] args, -
MethodProxy proxy) throws Throwable { -
System.out.println("事物开始"); -
proxy.invokeSuper(obj, args); -
System.out.println("事物结束"); -
return null; -
} -
}

版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



