spring动态代理

原创 2012年03月29日 18:40:59

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

相关文章推荐

spring动态代理原理

  • 2014年11月22日 11:37
  • 13KB
  • 下载

Spring-AOP-JDK动态代理

  • 2015年05月12日 13:45
  • 75KB
  • 下载

java 高新技术【11.2】 动态代理类 编写类似 AOP 与 BeanFactory。初试Spring框架

1.切面(aspect):    要实现的交叉功能,是系统模块化的一个切面或领域。如日志记录。 2.连接点:    应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的 字段。...

Spring动态代理

  • 2016年05月04日 19:49
  • 17KB
  • 下载

自定义Spring动态代理类型

自定义Spring动态地代理类型

通过动态代理模拟Spring AOP

  • 2012年07月10日 12:09
  • 14KB
  • 下载

cglib aop spring 动态代理

  • 2014年08月16日 11:11
  • 965KB
  • 下载

Spring AOP动态代理原理与实现方式

AOP:面向切面、面向方面、面向接口是一种横切技术  横切技术运用:  1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物     2.日志处理:...

spring+动态代理

  • 2015年03月29日 19:29
  • 20KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring动态代理
举报原因:
原因补充:

(最多只允许输入30个字)