首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate学习札记第13讲-jdk动态代理和CGLib

2012-11-20 
hibernate学习笔记第13讲-jdk动态代理和CGLib?Jdk动态代理,CGLib字节码生成如果目标对象实现了接口,可以使

hibernate学习笔记第13讲-jdk动态代理和CGLib

?

Jdk动态代理,CGLib字节码生成

如果目标对象实现了接口,可以使用jdk动态代理和CGLib

如果没有实现接口,只能使用CGLib

Jdk动态代理要实现一个接口:InvocationHandler

?

publicclass SecurityHandler implements InvocationHandler {

//目标对象,对该目标对象生成代理

???????? private Object targetObject;

????????

//生成代理对象,当生成完代理对象,调用代理对象上的方法时,默认先调用invoke方法。

???????? public Object newProxy(ObjecttargetObject) {

?????????????????? this.targetObject =targetObject;

?????????????????? returnProxy.newProxyInstance(targetObject.getClass().getClassLoader(),

??????????????????????????????????????????????????????????????????????????????????? ? targetObject.getClass().getInterfaces(),

??????????????????????????????????????????????????????????????????????????????????? ? this);

???????? }

????????

???????? public Object invoke(Object proxy,Method method, Object[] args)

??????????????????????????? throws Throwable {

?????????????????? checkSecurity();

?????????????????? //目标对象方法的返回值

?????????????????? Object ret = null;

?????????????????? try {

??????????????????????????? //调用目标对象的真实实现

??????????????????????????? ret = method.invoke(this.targetObject,args);

?????????????????? }catch(Exceptione) {

??????????????????????????? e.printStackTrace();

??????????????????????????? throw newjava.lang.RuntimeException(e);

?????????????????? }

?????????????????? return ret;

???????? }

???????? private void checkSecurity() {

?????????????????? System.out.println("----------checkSecurity()---------------");

???????? }}

//使用动态代理

publicstatic void main(String[] args) {

?????????????????? SecurityHandler handler = newSecurityHandler();

?????????????????? UserManager userManager =(UserManager)handler.newProxy(new UserManagerImpl());

?????????????????? //userManager.addUser("张三", "123");

?????????????????? userManager.deleteUser(1);

???????? }

热点排行