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的两种代理方式:JDK动态代理和CGLIB动态代理

代理模式代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象...
  • cckevincyh
  • cckevincyh
  • 2017年02月10日 14:04
  • 8839

java动态代理和spring动态代理对比

Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,...
  • do_bset_yourself
  • do_bset_yourself
  • 2016年04月18日 21:37
  • 3997

Spring 实现动态代理 附源码

spring 实现动态代理几个步骤: 1、写一个类 (LoggerProxy)实现invocationHandle 接口中的invoke方法; 2、创建需要代理的对象 3、LoggerProxy 构造...
  • hao007cn
  • hao007cn
  • 2014年02月26日 22:34
  • 954

Spring AOP动态代理例子

对Oracle数据库的部门表进行增删改查: 话不多说; 1.实体类可以不写.hbm.xml文件直接写注解方式: package com.jadeon.entity; import ja...
  • love_moon821
  • love_moon821
  • 2017年10月21日 00:46
  • 117

spring 注解方式动态代理

spring 注解方式动态代理
  • zhangxiaomin1992
  • zhangxiaomin1992
  • 2016年06月16日 17:28
  • 1085

Java的动态代理机制和Spring的实现方式

JAVA 代理实现 代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装。 动态代理则是在运行时生成了相关代理累,在JAVA中生成动态代理一般有两种方式。 JDK自带...
  • tanga842428
  • tanga842428
  • 2016年08月09日 10:07
  • 941

Spring Boot AOP之Java 动态代理

最近重温《Head First 设计模式》,里面讲到代理模式时设计到Java动态代理。动态代理是Spring Boot AOP面向切面编程的基础。所以打算给自己做个笔记。 示例演示  先编写一个动态代...
  • webzhuce
  • webzhuce
  • 2017年05月29日 23:47
  • 2388

spring的动态代理机制细节

原文链接:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
  • wabiaozia
  • wabiaozia
  • 2017年04月21日 08:00
  • 457

Spring的代理模式(静态代理和动态代理)

public class HelloProxy implements InvocationHandler { private Logger logger=Logger.getLogger(this....
  • lzghxjt
  • lzghxjt
  • 2016年07月10日 11:04
  • 3034

Spring AOP实现:面向切面编程——动态代理原理

1.  Aop-----面向切面编程:原理动态代理 1、 aop在spring中的作用 a)    提供声明式事务 b)    允许用户自定义切面,在不改变原有功能的前提下,添加新的功能。 2...
  • m_q_x
  • m_q_x
  • 2017年09月08日 11:16
  • 173
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring动态代理
举报原因:
原因补充:

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