- 浏览: 178172 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (104)
- JavaScript备忘 (11)
- Java编程 (23)
- struts框架 (3)
- hibernate框架 (0)
- ibatis框架 (2)
- C++编程 (2)
- 数据库 (8)
- 操作系统 (2)
- Extjs (0)
- 基于web的工作流引擎设计 (0)
- 开发异常备忘 (5)
- 项目管理工具 (6)
- Spring框架 (3)
- HTML (1)
- 项目架构 (1)
- 备忘 (20)
- 设计模式 (9)
- Disruptor (0)
- CQRS (0)
- DDD (0)
- Axon (0)
- JavaScript (1)
- 微信 (0)
- 新浪微博 (1)
- 软件备份 (2)
- AngularJS (1)
- 安全性 (1)
- Linux (2)
- 工具 (4)
- OSGI (1)
- idea (2)
- Docker (1)
- 测试相关 (0)
- WebService (1)
- 数据安全 (0)
- 移动开发 (0)
- springboot (1)
最新评论
-
larryscale:
zz_wangyuhoho 写道你这个工程跑不起来呀我测试过的 ...
Springmvc3+Spring3+MyBatis3 -
zz_wangyuhoho:
你这个工程跑不起来呀
Springmvc3+Spring3+MyBatis3 -
aeolusj:
var myAlert=alert;改为var myAlert ...
js 拦截alert对话框 -
skcks:
建行内部开发平台也是做了一个类似的封装用于ajax远程调用服务 ...
通用Ajax设计 -
qiuyu1990:
这个应该是 DWR的原理吧
通用Ajax设计
一. java 的jdk動態代理
用JDK實現的動態代理,被代理的對象必須實現一個接口才可以.其實現主是通過java.lang.reflect.Proxy類和 java.lang.reflect.InvocationHandler接口;
二. 本章用'售票點代理車站售票'的示例來演示java 的jdk動態代理的實現.完整代碼如下:
1. [被代理目標要實現的接口]
package structuralPattern.proxy.jdk; /** * @ClassName: ITarget * @Description:賣票接口 * @author Liyongbin * @date 2011-2-8 下午12:52:09 * @version V1.0 */ public interface ITicket { public abstract void saleTicket(); }
2. 車站售票[被代理目標]
package structuralPattern.proxy.jdk; /** * @ClassName: Train * @Description:車站 * @author Liyongbin * @date 2011-2-8 下午12:54:36 * @version V1.0 */ public class Train implements ITicket{ @Override public void saleTicket() { System.out.println("售車票"); } }
3. 售票服務
package structuralPattern.proxy.jdk; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * @ClassName: BuyTicketService * @Description:售票服務 * @author Liyongbin * @date 2011-2-8 下午01:02:36 * @version V1.0 */ public class BuyTicketService implements InvocationHandler { //要代理的目標 private Object target; public BuyTicketService(Object target) { this.target=target; } // @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { deliverTicket(); method.invoke(target, args); discountTicket(); return null; } //"代理"自己的方法1 public void deliverTicket() { System.out.println("送票上門服務"); } //"代理"自己的方法2 public void discountTicket() { System.out.println("買票打折服務"); } }
4. 動態代理
package structuralPattern.proxy.jdk; import java.lang.reflect.Proxy; /** * @ClassName: DynamicProxy_JDK * @Description: 動態代理 * @author Liyongbin * @date 2011-2-8 下午12:58:45 * @version V1.0 */ public class DynamicProxy_JDK { public Object getProxy(Object target) { return Proxy .newProxyInstance(target.getClass().getClassLoader(), target .getClass().getInterfaces(), new BuyTicketService(target)); } }
5. 測試
package structuralPattern.proxy.jdk; public class DynamicProxyTest { public static void main(String[] args) { //實例化代理 DynamicProxy_JDK dp = new DynamicProxy_JDK(); //代理 ITicket ticket = (ITicket) dp.getProxy(new Train()); //調用目標方法 ticket.saleTicket(); } }
6. 運行結果:
送票上門服務
售車票
買票打折服務
发表评论
-
Springboot项目(整合WebService带协议头验证+WebSocket+Web+动态日志输出)
2020-05-12 14:05 1094环境配置: springboot 1.5.14 ... -
activiti5.18 默认查询的sql生成两个order by
2019-10-17 12:14 387<spring.version>4.2.4.RE ... -
springboot 定时任务重复执行
2019-06-04 17:35 2174开发一数据接收WebService,里面用到定时任务@Sc ... -
mybatis-generator自动生成代码[增加Service的生成]
2016-03-22 10:08 9886源码包见附件[Maven项目,在1.3.2基础上修改官方源码] ... -
网络状态监控
2014-06-27 12:56 631import java.io.BufferedReader; ... -
Spring MVC+Jquery Ajax 前后台传递Json对象
2014-03-29 10:02 6145关于Spring MVC3.X 接收和返回Json ... -
同时启动多个Tomcat服务器
2013-10-25 17:15 593我所用Tomcat服务器都为zip版,非安装版。以两个为例: ... -
md5+BASE64加密
2013-10-08 23:20 973import sun.misc.BASE64Encoder; ... -
用MD5对密码进行加密
2013-08-10 15:21 1021package com.yong.bin.md5; i ... -
把CST格式的字符串转成普通的日期格式
2013-02-27 15:58 1578public static void main(Str ... -
Springmvc3+Spring3+MyBatis3
2012-11-27 15:03 1372最近写的一个三层框架:Springmvc3+Spring3+ ... -
Java技术——内部类
2012-11-18 17:35 925内部类 (inner class) 定义:在一个类中定义 ... -
自定义标签
2012-10-26 17:13 0<?xml version="1.0" ... -
log4j.properties
2012-10-24 12:32 0log4j.rootLogger=INFO, log4j ... -
通用Ajax设计
2012-10-21 10:20 2012利用Servlet和反射技术实现通用的Ajax调用设计,如下: ... -
导入Jar包的快捷键
2012-07-02 22:47 1171导入当前光标所在的地方未导入的Jar包: shift+ctrl ... -
Extjs grid 后台
2012-05-22 08:16 0public String gridRecordsByXML( ... -
Extjs 布局
2012-04-18 12:27 0<%@ page language="java ... -
FreeMarker在java项目中的应用
2011-02-15 21:34 3206一、体验FreeMarker FreeMar ... -
动态代理 [用cglib实现]
2011-02-09 10:28 1241一. 用cglib 实现java 的動態代理 ...
相关推荐
下面是一个简单的示例,演示了如何使用JDK动态代理为一个接口创建代理对象,并在方法调用前后添加日志记录功能。 ```java /** * 业务接口 */ public interface IHello { void hello(String name); } /** * ...
在"通过Configuration文件实现AOP.docx"文档中,可能会详细讲述如何在Spring配置文件中配置AOP代理,包括如何选择使用JDK动态代理还是CGLIB。 总结来说,JDK动态代理简单且高效,适合接口驱动的设计,而CGLIB适用于...
- **只能代理实现了接口的类**:这是JDK动态代理的一个限制,如果目标对象没有实现任何接口,则无法使用JDK动态代理。 - **性能开销**:虽然这种开销通常很小,但在高并发场景下可能会成为瓶颈。 通过上述分析,...
Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...
如果我们想使用 JDK 动态代理,必须提供一个接口,并且将其实现类交给 JDK 动态代理来生成代理类。 CGLIB 动态代理是基于类的代理, 它可以代理类和接口。CGLIB 动态代理使用 ASM 字节码工具来生成代理类。CGLIB ...
- **JDK动态代理**:适用于目标类已经实现接口的情况,使用简单,但只能针对接口进行代理。 - **CGLIB代理**:更适合未实现接口的类,更灵活,但生成代理类的速度较慢,因为涉及到字节码的生成。 总结: Java代理...
动态代理主要分为两种实现方式:JDK动态代理和CGLIB动态代理。 1. JDK动态代理: JDK动态代理基于Java的反射API,它要求被代理的目标对象必须实现一个或多个接口。JDK动态代理的核心类是`java.lang.reflect.Proxy`...
例如,可以使用动态代理来实现记忆功能、数据库连接池、事务控制、AOP 等。动态代理的优点在于可以在不修改原有代码的情况下,增加新的功能,从而提高软件的灵活性和扩展性。 结论 JDK 动态代理技术是 Java 语言...
JDK动态代理和CGLIB代理是两种常用的实现方式。 首先,我们来看看JDK动态代理。JDK动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象...
与JDK的动态代理不同,JDK代理基于接口,如果目标类没有实现接口,就无法使用JDK的动态代理。而CGlib则无需目标类实现任何接口,因此它的应用范围更广。 以下是使用CGlib实现动态代理的关键步骤: 1. 引入依赖:在...
在本文中,我们将深入探讨如何模拟JDK的动态代理内部实现。 首先,我们需要了解JDK动态代理的基础知识。Java中的动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。`Proxy...
在Java编程领域,JDK动态代理是一个非常重要的概念,它允许我们在运行时动态地创建一个实现了特定接口的代理对象,以此来拦截并扩展原有对象的行为。动态代理在很多场景下都有应用,比如AOP(面向切面编程)、事件...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理类,这些代理类可以扩展或修饰已存在的接口实现。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等,这些功能可以在不修改原始...
下面是使用JDK动态代理的一个例子: ```java public interface Service { void doSomething(); } public class RealServiceImpl implements Service { @Override public void doSomething() { // 实现具体业务...
JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被代理的目标类必须实现至少一个接口。`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是JDK动态代理的核心。Proxy类用于...
当我们的目标对象实现了特定的接口时,我们可以使用JDK动态代理来创建该对象的代理。以下是JDK代理的基本步骤: 1. **定义接口**:首先,我们需要定义一个或多个接口,这些接口将被目标对象实现,并且代理对象也会...
分别使用jdk和cglib实现动态代理,包含UML图。还有相关的博客链接:http://blog.csdn.net/y_love_f/article/details/46345581.博客中有具体的代理解释
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
下面我们将深入探讨JDK动态代理的原理、使用方式以及其在实际开发中的应用。 首先,我们要了解JDK动态代理的基本概念。在Java中,动态代理是通过java.lang.reflect包下的两个类实现的:Proxy和InvocationHandler。...