Aaron_xyt的专栏

会当凌绝顶,一览众山小

spring动态代理

package com.spring;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cpm.util.HibernateSessionFactory;


public class SecurityHandler implements InvocationHandler {

//动态代理   实现InvocationHandler接口
private Object targetObject;   //对传进来的目标对象进行代理

//newProxy生成动态代理对象   需要传进来目标对象
public Object newProxy(Object targetObject){
  this.targetObject = targetObject;   //传需要代理的目标对象
  //返回代理对象   this表示本对象实现该代理
  return Proxy.newProxyInstance(
    targetObject.getClass().getClassLoader(),
    targetObject.getClass().getInterfaces(),
    this);
}

//new该类的实例则默认自动调用invoke()方法
//proxy:代理对象  method:对象的方法  Object[] args:对象的参数
public Object invoke(Object proxy, Method method, Object[] args)
   throws Throwable {
  // 安全性检查  事务处理
  checkSecurity();
  Session session = HibernateSessionFactory.getSession();
  Transaction tr = session.beginTransaction();
 
  //返回值  若不返回 则客户端拿不到返回值
  Object result = null;
  try{
   //method表示方法如addUser()  result为返回类型void为null
   result = method.invoke(this.targetObject, args);
   tr.commit();
  }catch(Exception e){
   tr.rollback();
   e.printStackTrace();
   throw new java.lang.RuntimeException(e);
  }
  return result;
}

//安全性检查
private void checkSecurity(){
  System.out.println("------checkSecurity()-------");
}

}

//client

public class Client {

public static void main(String[] args) {
  SecurityHandler handle = new SecurityHandler();
  UserManager userManager = (UserManager)handle.newProxy(new UserManagerImpl());
  userManager.addUser("谢孝章", "123456");
}
}

阅读更多
个人分类: (1)spring
上一篇指针结构体_数组指针结构体_指针数组结构
下一篇hibernate环境配置与单表操作
想对作者说点什么? 我来说一句

Spring动态代理

动态代理

q3498233 q3498233

2011-08-18 13:12:12

阅读数:456

没有更多推荐了,返回首页

关闭
关闭