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");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值