- 浏览: 1251863 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
JDK的动态代理是基于接口的
package com.open.aop; public interface BusinessInterface { public void processBusiness(); }
目标对象
package com.open.aop; public class BusinessObject implements BusinessInterface { public void processBusiness() { System.out.println("action"); } }
代理对象
package com.open.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class LogHandler implements InvocationHandler { private Object delegate; public Object binder(Object delegate) { this.delegate=delegate; return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(),this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = null; System.out.println("对象方法调用前"); try { obj = method.invoke(delegate, args); } catch (Exception e) { } System.out.println("对象方法调用后"); return obj; } }
测试类
package com.open.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) { BusinessInterface bi = (BusinessInterface) new LogHandler().binder(new BusinessObject()); bi.processBusiness(); } }
输出结果
对象方法调用前
action
对象方法调用后
**********************************cglib******************************************
目标对象
public class Target { public String execute() { String message = "----------test()----------"; System.out.println(message); return message; } }
拦截器
import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class MyMethodInterceptor implements MethodInterceptor { public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println(">>>MethodInterceptor start..."); Object result = methodProxy.invokeSuper(object,args); System.out.println(">>>MethodInterceptor ending..."); return "hahahh"; } }
import net.sf.cglib.proxy.Enhancer; public class TestCglibProxy { public static void main(String rags[]){ Target target = new Target(); TestCglibProxy test = new TestCglibProxy(); Target proxyTarget = (Target)test.createProxy(Target.class); String res=proxyTarget.execute(); System.out.println(res); } public Object createProxy(Class targetClass){ Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(targetClass); enhancer.setCallback(new MyMethodInterceptor()); return enhancer.create(); } }
运行结果:
结果 写道
C:\classes>java -cp .;C:\classes\cglib-nodep-2.1_3.jar TestCglibProxy
>>>MethodInterceptor start...
----------test()----------
>>>MethodInterceptor ending...
hahahh
C:\classes>
>>>MethodInterceptor start...
----------test()----------
>>>MethodInterceptor ending...
hahahh
C:\classes>
发表评论
-
一个JSF的入门例子
2009-11-09 14:00 1769public class UserBean { pr ... -
spring定时器和spring javaMail
2009-08-27 17:28 1682spring内置了定时器,其实是对java.util.time ... -
SpringORM (ibatis)的一个例子
2009-07-24 11:23 1728@Service @Transactional publi ... -
Spring DAO的一个小例子
2009-07-24 11:20 1568采用SpringDAO自身的数据库处理类。 import j ... -
Spring IOC简单实例
2009-07-09 15:30 2060把对类的实例化工作从类内部转交给Spring的IOC容器来做 ... -
spring2.5文件上传 fileUpload
2009-06-10 14:14 2460spring的文件上传 1jar包:commons-fil ... -
spring2.5学习笔记之三:spring对JDBC的支持
2009-04-17 12:59 1630在DAO类中,我们继承Spring的DAO,代码如下: j ... -
spring学习笔记之二:Spring对事务的支持
2009-04-17 12:06 12021spring对事务的管理提供了一致的编程模板,在高层 ... -
spring2.5学习笔记之一:IOC和MVC
2009-04-16 16:29 22631spring2.5的使用在配置上已经有了很大的 ... -
IOC 容器实例化的5钟方法
2008-12-10 11:13 1366方法一: Applicati=onCon ...
相关推荐
Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...
Java Jdk 和 Cglib 动态代理 Demo 1.通过 JDK 反射形式创建动态代理 2.通过CGLIB基于ASM字节码技术创建动态代理 3.Java 反射原理演示 4.CGLib 依赖如下: <groupId>cglib <artifactId>cglib <version>3.3.0 ...
动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是基于接口的代理,它通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。当我们的目标对象实现了特定的接口时,我们可以...
在"AopDemo"这个文件中,我们可以期待看到一个完整的示例,它将演示如何使用JDK动态代理和CGLIB来创建代理对象,并添加增强功能。通过这个例子,开发者可以更好地理解AOP的工作原理,以及如何在实际项目中应用这两种...
在Spring框架中,AOP代理可以自动利用JDK动态代理或CGLIB(当目标类没有实现接口时)。Spring AOP提供了更高级别的抽象,让我们可以在不直接操作`InvocationHandler`的情况下实现相同的目标。通过配置或注解,我们...
- 动态代理:当JDK的Proxy不能满足需求时,比如目标类没有实现接口,CGLIB可以提供解决方案。 - 缓存机制:比如在ORM框架Hibernate中,CGLIB用于缓存对象,提高查询效率。 下面是一个简单的CGLIB使用示例: ```...
java jdk 动态代理用法、资料、demo
本示例"JDKProxy"着重于对比两种常见的动态代理技术:JDK的接口代理和CGLIB的类代理。这两种代理方式在Java应用程序中都有广泛的应用,例如在AOP(面向切面编程)框架如Spring中。 首先,我们来深入了解一下JDK的...
总结来说,"JavaProxy Demo"是一个介绍和演示Java动态代理技术的实例,包括JDK和CGLIB两种实现方式,以及它们在实际场景中的应用。通过学习和分析这个Demo,开发者可以深入理解动态代理的概念,掌握如何在项目中利用...
动态代理主要有两种实现方式:JDK自带的`java.lang.reflect.Proxy`类和`java.lang.invoke.MethodHandle`API。这里主要讨论JDK的Proxy类,因为这是最常见且相对简单的实现方式。 1. **Proxy类的使用** - **Proxy....
总结来说,Java代理机制为我们提供了扩展和控制已有对象行为的能力,无论是静态代理还是动态代理(JDK或CGlib),都能在不修改原始代码的基础上增加新的功能,使得代码更加灵活和可维护。在实际开发中,根据具体需求...
Java提供了两种主要的代理实现方式:CGLIB代理和JDK动态代理。 **JDK动态代理**: JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类用于创建一个代理对象,...
- **动态代理**:JDK提供Proxy类和InvocationHandler接口,可以在运行时动态创建代理对象。 - **CGLIB动态代理**:对于没有接口的情况,CGLIB库可以创建目标类的子类作为代理。 4. **ProxyPatternDemo的示例分析*...
首先,我们需要理解Spring中的两种动态代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口,适用于实现了至少一个接口的目标对象;而CGLIB动态代理则是在运行时为类创建子类,适用于没有接口或需要代理的类...
在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类实现了至少一个接口时,Java会生成一个代理类来执行增强的代码。而CGLIB则是在运行时通过字节码技术生成一个子类,用于...
通过分析和运行这个示例工程,你可以了解到如何在实际项目中使用CGlib进行AOP编程,如何定义拦截器,以及如何通过动态代理来增强类的行为。这不仅加深了对CGlib的理解,也增强了对AOP概念的实际应用能力。
1. **基于代理的AOP**:Spring提供了两种代理方式,JDK动态代理和CGLIB代理。JDK动态代理主要针对接口实现,而CGLIB代理则针对类实现。 2. **基于注解的AOP**:Spring 2.5开始支持注解驱动的AOP,通过在方法上使用`...
动态代理在Java中主要有两种实现方式:JDK动态代理和CGLIB动态代理。 1. JDK动态代理: JDK动态代理基于Java的接口实现,因此,要使用JDK动态代理,被代理的对象必须实现至少一个接口。JDK的`java.lang.reflect....
Java AOP通常使用代理模式实现,Spring框架提供了两种主要的代理方式:JDK动态代理和CGLIB代理。JDK代理适用于接口实现类,而CGLIB代理则针对没有实现接口的类。 IOC,即控制反转,是对象依赖关系的反转。在传统的...