- 浏览: 397808 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
package com.ssc.gc.hook; public interface Hook { public void hook(); }
package com.ssc.gc.hook; import com.ssc.gc.hook.annotation.Surround; public class ConcreateHook extends AbstractHook{ @Surround public void hook(){ super.hook(); System.out.println("Concreate Hook run!"); } }
package com.ssc.gc.hook; public interface Trigger { public void trigger(); }
package com.ssc.gc.hook; public class ConcreateTrigger implements Trigger{ @Override public void trigger() { System.out.println("Concreate Trigger run!"); } }
package com.ssc.gc.hook; public class AbstractHook implements Hook{ Trigger trigger; @Override public void hook() { System.out.println("abstractHook speak"); trigger.trigger(); } public Trigger getTrigger() { return trigger; } public void setTrigger(Trigger trigger) { this.trigger = trigger; } }
package com.ssc.gc.hook.annotation; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; @Retention(RUNTIME) @Target({ METHOD }) public @interface Surround { /** * */ String name() default ""; /** * */ boolean required() default true; }
package com.ssc.gc.hook.cglibproxy; import java.lang.reflect.Method; import com.ssc.gc.hook.annotation.Surround; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class SurroundAnnoProxy implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { Surround surround = method.getAnnotation(Surround.class); if(surround == null){ return proxy.invokeSuper(obj, args); } System.out.println("do something after original object call"); Object result = proxy.invokeSuper(obj, args); System.out.println("do something after original object call"); return result; } }
package com.ssc.gc.hook; import java.util.HashSet; import java.util.Set; import net.sf.cglib.proxy.Enhancer; import org.junit.Test; import cglib.CallBackObj; import com.ssc.gc.hook.cglibproxy.SurroundAnnoProxy; import com.ssc.gc.sample.metrics.MetricsMonitorProcessor; public class HookClient { public static void main(String[] args) { Trigger trigger = new ConcreateTrigger(); ConcreateHook hook = new ConcreateHook(); hook.setTrigger(trigger); hook.hook(); } @Test public void test1(){ Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(ConcreateHook.class); enhancer.setInterfaces(getInterfaces(ConcreateHook.class).toArray(new Class<?>[0])); enhancer.setCallback(new SurroundAnnoProxy()); ConcreateHook mmp = (ConcreateHook)enhancer.create(); mmp.setTrigger(new ConcreateTrigger()); mmp.hook(); } private Set<Class<?>> getInterfaces(Class<?> clazz) { Set<Class<?>> interfaceList = new HashSet<Class<?>>(); if (clazz.isInterface()) { interfaceList.add(clazz); } Class<?> superClass = clazz.getSuperclass(); if (superClass != null) { interfaceList.addAll(getInterfaces(superClass)); } Class<?>[] superInterfaces = clazz.getInterfaces(); for (int i = 0; i < superInterfaces.length; i++) { Class<?> superInterface = superInterfaces[i]; interfaceList.addAll(getInterfaces(superInterface)); } return interfaceList; } }
相关推荐
Java CGLib 实例代码 Java CGLib 实例代码是 Java 中强大的三个特征:反射、Proxy 和元数据的...CGLib 是一个强大的工具,能够非常方便地实现 AOP 和 Decorator 模式,并且可以与 Spring 整合使用,实现强悍的框架。
在实际应用中,如Hibernate等ORM框架广泛使用CGLIB来实现对Java对象的透明化持久化,提高了开发效率和灵活性。通过学习和熟练使用CGLIB,开发者可以更好地应对需要动态生成代码或增强已有类功能的挑战。
如果目标类实现了接口,CGLib会优先选择使用接口代理。CGLib的核心是ASM库,它能直接操作字节码,从而实现对类的动态生成和修改。 ### 动态代理的实现 1. **Enhancer**:CGLib中的核心类,用于创建代理对象。你可以...
2. 使用CGLIB: - 引入CGLIB库,如在Maven项目中添加依赖。 - 创建Enhancer对象,设置被代理的目标对象和拦截器。 - 通过Enhancer的create()方法生成代理对象。 - 代理对象的调用会触发拦截器,实现功能增强。 ...
下面我们将详细探讨CGlib的主要功能和使用方法: 1. **动态代理**:CGlib常被用作JDK动态代理的替代方案,特别是当处理的目标类没有实现接口时。通过创建目标类的子类,并在子类中拦截并增强方法调用,CGlib可以...
本文将重点介绍使用CGLIB库实现的动态代理。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它在许多AOP(面向切面编程)框架中被广泛应用,如Spring AOP。CGLIB通过字节码技术生成代理类,...
CGlib,全称为Code Generation Library,是一个强大的、高性能的代码生成库,被广泛应用于Java...在"cglib依赖功四个jar+java实例.rar"中,你可以找到使用CGlib进行动态代理的完整示例,有助于深入理解和应用这一技术。
在Spring中,如果你选择使用基于代理的事务管理,且目标类不实现接口,Spring就会默认使用CGLib来创建代理。通过代理,可以在方法调用前后插入额外的逻辑,如事务控制、性能监控等。 CGLib的使用通常涉及到以下几个...
【CGLib:强大的Java代码生成库】 CGLib(Code Generation Library)是一个强大的、高性能的代码生成库,它在运行期扩展Java类与实现Java接口。...正确理解和使用CGLib,能极大地提升开发效率和代码质量。
开发者在项目中引入此jar包,即可使用Cglib进行动态代理和类增强。 5. **cglib-nodep-3.3.0.jar**:此jar包与前者类似,但“nodep”意味着它不依赖于任何额外的库,如ASM。如果项目中已经包含了ASM库,那么可以选择...
- 创建Enhancer实例:Enhancer是Cglib的核心类,它负责生成代理对象。 - 设置被代理的目标对象:通过setSuperclass()方法设置目标类的Class对象。 - 设置回调机制:通过setCallback()或setCallbacks()方法设置回...
在Spring中,当目标类没有实现任何接口时,Spring会选择使用CGlib来创建代理,实现事务管理、日志记录等功能。此外,CGlib也被ORM框架如Hibernate用于动态生成实体类的代理,以便实现懒加载和其他优化策略。 总的来...
2. **接口回调**:对于接口,CGLib可以使用`Enhancer`类配合`Callback`接口来创建代理对象。这种方式更加灵活,但要求目标类必须实现至少一个接口。 关键组件和接口包括: - **Enhancer**:这是CGLib的主要入口点...
当不支持接口的类需要被代理时,Spring会使用CGlib动态创建一个目标类的子类,并在子类的方法上插入拦截代码,从而实现切面逻辑。 2. **动态代理**: 对于没有实现接口的类,JDK的java.lang.reflect.Proxy无法直接...
本篇将深入探讨两种主要的Java动态代理技术:JDK动态代理和CGLIB。 首先,我们来了解一下JDK动态代理。JDK动态代理基于Java反射API实现,主要用于接口代理。以下是一个简单的JDK动态代理的使用步骤: 1. **定义...
CGlib,全称为Code Generation Library,是一个强大的、高性能的代码生成库,被广泛应用于Java编程中,特别是面向切面...理解并掌握CGlib的工作原理和使用方式,对于提升Java开发中的面向切面编程能力具有重要意义。
- **net.sf.cglib.proxy.Enhancer:** 用于创建代理实例的核心类。它可以通过调用 `create()` 方法来创建代理对象。 #### 总结 CGLIB 是一个高度灵活且功能强大的代码生成库,特别适合于需要动态生成代理类的场景...
在Java开发中,CGLIB经常被用作AOP(面向切面编程)的底层实现,例如Spring框架就使用了CGLIB来实现对目标类的动态代理。 CGLIB是通过字节码技术来实现动态代理的。当我们的应用程序需要动态地创建一个类的实例或者...
3. **动态代理**:通过Enhancer类,我们可以指定要增强的类并提供拦截器,然后获取到这个动态生成的子类实例,这就是CGlib代理对象。 **CGlib-2.0.2版本特性** CGlib-2.0.2是CGlib的一个稳定版本,发布于较早的...