使用动态代理解决Hibernate序列化,避免延迟加载问题 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-15
pf.setTargetClass(object.getClass()); pf.setOptimize( true ); pf.setTarget(object); pf.setProxyTargetClass( true ); pf.setOpaque( true ); pf.setExposeProxy( true ); pf.setPreFiltered( true ); HibernateBeanSerializerAdvice beanSerializerAdvice = new HibernateBeanSerializerAdvice(); beanSerializerAdvice.setExcludesProperties(excludesProperties); pf.addAdvice(beanSerializerAdvice); this .proxy = (T)pf.getProxy(); } } public T getProxy(){ return this .proxy; } static private class HibernateBeanSerializerAdvice implements MethodInterceptor { private String[] excludesProperties = new String[ 0 ]; public String[] getExcludesProperties() { return excludesProperties; } public void setExcludesProperties(String[] excludesProperties) { this .excludesProperties = excludesProperties == null ? new String[ 0 ] : excludesProperties; } public Object invoke(MethodInvocation mi) throws Throwable { String propertyName = getPropertyName(mi.getMethod().getName()); Class returnType = mi.getMethod().getReturnType(); if (propertyName == null ) { return mi.proceed(); } if (! Hibernate.isPropertyInitialized(mi.getThis(), propertyName)) { return null ; } if (isExclude(mi, propertyName)) { return null ; } Object returnValue = mi.proceed (); return processReturnValue(returnType, returnValue); } private Object processReturnValue(Class returnType, Object returnValue) { if (returnValue == null ) return null ; if (returnType != null && Modifier.isFinal(returnType.getModifiers())) { return returnValue; } //This might be a lazy-collection so we need to double check if (! Hibernate.isInitialized(returnValue)) { return null ; } //this is Hibernate Object if (returnValue instanceof HibernateProxy) { return new HibernateBeanSerializer (returnValue).getProxy(); } else if (returnValue instanceof PersistentCollection) { if (returnType.isAssignableFrom(Map. class )) { Map proxyMap = new LinkedHashMap(); Map map = (Map)returnValue; Set<Map.Entry> entrySet = map.entrySet(); for (Map.Entry entry : entrySet) { proxyMap.put(entry.getKey(), new HibernateBeanSerializer(entry.getValue())); } return proxyMap; } C |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于使用动态代理解决Hibernate序列化,避免延迟加载问题 - 编程入门网的所有评论