spring

动态代理模式:

public class DaoProxy implements InvocationHandler{
private static SessionFactory factory;
static{
Configuration cfg = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
factory = cfg.buildSessionFactory(sr);
}

/**目标对象*/
private Object targetObj;
public DaoProxy(Object targetObj) {
// TODO Auto-generated constructor stub
this.targetObj = targetObj;
}
/**
* 产生代理对象 代理对象执行方法时,会调用invoke()
* @return
*/
public Object getProxy(){
return Proxy.newProxyInstance(
this.targetObj.getClass().getClassLoader(),
this.targetObj.getClass().getInterfaces(),
this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//方法返回的值
Object value = null;
// TODO Auto-generated method stub
//创建session
Session session = factory.openSession();
session.beginTransaction();
//得到目标对象中setSession()的方法对象。
Method setMethod = this.targetObj.getClass().getMethod("setSession", Session.class);
//使用方法 将产生的session对象设置进去
setMethod.invoke(this.targetObj, session);

try{

value = method.invoke(this.targetObj, args);

session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
session.close();
}
return value;
}

}

posted @ 2014-10-15 20:46  红色小宇宙  阅读(57)  评论(0编辑  收藏  举报