- 浏览: 738282 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
CGLIB动态代理类
import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy implements MethodInterceptor { private Object target; /** * 创建代理对象 * * @param target * @return */ public Object getInstance(Object target) { this.target = target; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.target.getClass()); // 回调方法 enhancer.setCallback(this); // 创建代理对象 return enhancer.create(); } @Override // 回调方法 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("事物开始CGLIB"); proxy.invokeSuper(obj, args); System.out.println("事物结束CGLIB"); return null; } }
java动态代理类
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.springframework.aop.framework.AopProxy; public class ClassProxy implements InvocationHandler ,AopProxy{ private Object target; /** * 绑定委托对象并返回一个代理类 * @param target * @return */ public Object bind(Object target) { this.target = target; //取得代理对象 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); //要绑定接口(这是一个缺陷,cglib弥补了这一缺陷) } @Override /** * 调用方法 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; System.out.println("事物开始"); //执行方法 result=method.invoke(target, args); System.out.println("事物结束"); return result; } @Override public Object getProxy() { System.out.println("test getProxy"); return null; } @Override public Object getProxy(ClassLoader classLoader) { System.out.println("test getProxy"); return null; } }
尝试在java动态代理上进行java动态代理或者cglib代理,或者cglib代理上进行java动态代理或者cglib代理测试结果如下:
import java.lang.reflect.Modifier; import org.springframework.aop.framework.AopProxy; public class TestProxy { public static void main(String[] args) { // ClassProxy proxy = new ClassProxy(); // AopProxy bookProxy = (AopProxy) proxy.bind(new ClassProxy()); // bookProxy.getProxy(); // int i = bookProxy.getClass().getModifiers(); // String mods = Modifier.toString(i); // System.out.println("Class modifiers: " + mods); // CglibProxy cglib = new CglibProxy(); // ClassProxy bookCglib=(ClassProxy)cglib.getInstance(new ClassProxy()); // bookCglib.getProxy(); // ClassProxy bookCglib2=(ClassProxy)cglib.getInstance(bookCglib); // bookCglib2.getProxy(); //JDK代理后再进行一层jdk代理,测试结果不可以,循环调用,造成代理的死循环 // ClassProxy proxy = new ClassProxy(); // AopProxy bookProxy = (AopProxy) proxy.bind(new ClassProxy()); // AopProxy bookProxy2 = (AopProxy) proxy.bind(bookProxy); // bookProxy2.getProxy(); //jdk代理后再用cglib进行代理,测试结果不行,因为jdk代理后的类是public final类型的,cglib不能对final的类进行代理 // ClassProxy proxy = new ClassProxy(); // AopProxy bookProxy = (AopProxy) proxy.bind(new ClassProxy()); // bookProxy.getProxy(); // int i = bookProxy.getClass().getModifiers(); // String mods = Modifier.toString(i); // System.out.println("Class modifiers: " + mods); // CglibProxy cglib = new CglibProxy(); // ClassProxy bookCglib=(ClassProxy)cglib.getInstance(bookProxy); // bookCglib.getProxy(); //CGlib代理后再进行cglib代理,测试结果不可以 Caused by: java.lang.ClassFormatError: Duplicate method name&signature // CglibProxy cglib = new CglibProxy(); // ClassProxy bookCglib=(ClassProxy)cglib.getInstance(new ClassProxy()); // ClassProxy bookCglib2=(ClassProxy)cglib.getInstance(bookCglib); // bookCglib2.getProxy(); //CGlib代理后再进行jdk代理,测试结果不可以,因为CGlib代理后已经改变了类的签名,而jdk必须知道类的接口和实现 CglibProxy cglib = new CglibProxy(); ClassProxy bookCglib=(ClassProxy)cglib.getInstance(new ClassProxy()); bookCglib.getProxy(); ClassProxy proxy = new ClassProxy(); AopProxy bookProxy = (AopProxy) proxy.bind(bookCglib); bookProxy.getProxy(); } }
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13874对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1421使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10061更多ppt内容请查看:htt ... -
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
2013-06-28 21:35 11725原文链接: http://www.javaarch.net ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2901原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3793原文链接:http://www.javaarch.n ... -
Spring Security Logout
2013-06-03 00:05 2316原文地址:http://www.javaarch.net/ ... -
Spring Security Basic Authentication
2013-06-03 00:04 1688原文地址:http://www.javaarch.net/ ... -
Spring Security Form Login
2013-06-02 16:16 2106原文地址:http://www.javaarch.net/j ... -
spring3 的restful API RequestMapping介绍
2013-06-02 14:53 1111原文链接:http://www.javaarch.net/j ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1072Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3281spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4431java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1180RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1625我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2851#!/bin/sh DUMP_PIDS=`p ... -
spring3学习入门示例工程
2013-04-18 09:28 10821. github地址 https://github ... -
spring map使用annotation泛型注入问题分析
2013-04-15 13:30 8497今天在整一个spring的ioc学习demo,碰到 ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5410eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1782我们经常会处理一些价格,比如从运营上传的文件中将某 ...
相关推荐
Java动态代理在AOP中的应用,薄栋,邓芳,AOP(Aspect-Oriented-programming)是一种支持横切关注点的分解的技术,表达更高的抽象层次。它对于横切关注点就像面向对象程序设计对于对象�
但是学习java动态编译有助于我们从更深一层次去了解java。对掌握jdk的动态代理模式,还有比如CGLIB,Spring 的AOP的原理就很有帮助。这样我们在学习其他一些开源框架的时候就能够知其然也知其所以然。
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
为某一个对象创建一个代理对象,程序不直接用原本的对象,而是由创建的代理对象来控制原对象,通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...