- 浏览: 1250050 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (461)
- 心得体会 (166)
- Hibernate (9)
- Spring (12)
- Struts1 (3)
- Ajax (4)
- Java (54)
- 其他技术 (21)
- 数据库 (29)
- EXT (0)
- Struts2 (7)
- Xml (3)
- HTML (5)
- JavaScript (12)
- 面试相关 (3)
- BLOG (11)
- 计算机 (11)
- PMP (0)
- OGNL (1)
- LINUX (79)
- AIX (1)
- Ubuntu (14)
- Android (1)
- hadoop (3)
- LINUX debian (3)
- 心得体会 eclipse (2)
- JSTL (1)
- 心得体会 hadoop cdh3u5 (2)
- maven (5)
- Hive (1)
- 心得体会 工具使用 (3)
- spring data jpa Query By Example(QBE) (1)
- nginx (2)
- Apache (1)
- mysql (6)
- LINUX mysql (2)
- freemaker (1)
- 心得体会 FastDFS Nginx 断点续传 (1)
- LINUX FastDFS Nginx 断点续传 (1)
- 心得体会 Mybatis (2)
- 心得体会 mysql (4)
- php (1)
- logback 简介 (5)
- EL (1)
- Tomcat (2)
- win7 (1)
- LINUX maven (1)
- scrumworks (1)
- linux nginx (6)
- svn linux (1)
- mac (3)
- mac git (1)
- git (1)
- nexus (2)
- golang (1)
- LINUX Redis (1)
- mac oracle (1)
最新评论
-
a785975139:
有用
MySQL Error :SHOW PROFILES -
yijiulove:
弄了半天,参照你的方法解决了.特来感谢,知道可能是先加载,但是 ...
Spring和Mybatis整合时无法读取properties的处理方案 -
chenjinqi1987:
Missing com.sun.jdmk:jmxtools:jar:1.2.1 -
leifeng2:
请问怎么使用,运行之后d盘符没有生产音频文件呢?
java录音程序 -
sundful:
chenghong726 写道你好,我也遇到你这样的问题,按照 ...
Spring和Mybatis整合时无法读取properties的处理方案
代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类。我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能、条件判断等,这时候,就很有必要用到代理类。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 代理子类和目标子类的公共接口
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
* 代理子类和目标子类的公共接口
* @author rongxinhua
*
*/
public interface MyInterface {
public void doOperation();
}
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 目标子类
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我们要执行的目标方法
*/
@Override
public void doOperation() {
System.out.println("doOperation");
}
}
* 目标子类
* @author rongxinhua
*
*/
public class RealClass implements MyInterface {
/**
* 我们要执行的目标方法
*/
@Override
public void doOperation() {
System.out.println("doOperation");
}
}
而在没有使用代理模式的情况下,我们是这样执行目标方法的:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--> RealClass realObj = new RealClass();
realObj.doOperation(); //调用目标方法
realObj.doOperation(); //调用目标方法
打印时输出:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->doOperation
而我们要加入额外的处理的话,就可以使用代理类了:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/**
* 代理子类
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目标子类对象
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 调用目标子类的方法,并在其中加入了前置处理和后置处理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目标方法调用前的相关处理
*/
private void doBefore() {
System.out.println("doBefore");
}
/**
* 目标方法调用后的相关处理
*/
private void doAfter() {
System.out.println("doAfter");
}
}
* 代理子类
* @author rongxinhua
*
*/
public class ProxyClass implements MyInterface {
private MyInterface realObj; //目标子类对象
public ProxyClass(MyInterface realObj) {
this.realObj = realObj;
}
/**
* 调用目标子类的方法,并在其中加入了前置处理和后置处理
*/
@Override
public void doOperation() {
doBefore();
realObj.doOperation();
doAfter();
}
/**
* 目标方法调用前的相关处理
*/
private void doBefore() {
System.out.println("doBefore");
}
/**
* 目标方法调用后的相关处理
*/
private void doAfter() {
System.out.println("doAfter");
}
}
有了代理类,我们可以这样执行目标方法:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--> ProxyClass proxyObj = new ProxyClass(new RealClass());
proxyObj.doOperation(); //通过代理对象调用doOperation方法
proxyObj.doOperation(); //通过代理对象调用doOperation方法
打印时输出:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->doBefore
doOperation
doAfter
doOperation
doAfter
本文只是代理模式的在Java中的简单使用,而代理模式与Java反射机制的整合,为Java组件开发增加了强大的生命力.
发表评论
-
Java数字、货币值和百分数等的格式化处理
2016-09-13 18:36 967如果我们用下列语句输出一个数 System.out.pri ... -
jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
2016-08-17 09:01 1158公司内部同事分享的一篇文章 周末看到一个用jstack查看死锁 ... -
jstat查看jvm的GC情况[转]
2016-08-17 08:58 792jps(Java Virtual Machine Proce ... -
Java 7, Ubuntu 12.10 64bit issues
2015-04-13 11:57 1373At first Maven failed with the ... -
Map遍历的两种方式
2014-10-20 11:09 916第一种: Map map = new HashMap() ... -
对Map按key和value分别排序
2014-10-20 11:01 954一.理论准备 Map是键值对的集合接口, ... -
【转】程序包com.sun.image.codec.jpeg不存在 问题的完美解决
2014-10-09 13:43 1285maven下面编译失败,失败提示信息为:程序包com.sun ... -
关于系统读取properties配置文件的路径问题,包括打成jar包的运行文件
2014-10-08 18:05 1827在当前的一个项目中, ... -
java中的equals和hashCode(转载)
2014-01-15 14:01 871在某些时候,我们需要判断两个对象是否相等。Java的每个类都继 ... -
关于java中BufferedReader的read()及readLine()方法的使用注意
2013-06-05 16:08 2634以前学习的时候也没有太在意,在项目中使用到了才发现呵呵 1 ... -
java -cp
2013-04-19 12:03 1463java -cp classpath Specify a ... -
maven 打包可执行jar的方法
2013-04-19 12:02 48851.修改pom.xml增加如下内容 [html] ... -
Java 反射测试
2010-08-10 16:54 1305import java.lang.reflect.Invoca ... -
Creating Dynamic Web Project using Maven in Eclipse
2010-08-10 13:10 2863While using Maven as build tool ... -
建立你自己的本地仓库(Maven仓库管理-Nexus)
2010-07-02 13:34 4100这一个章节,我分两部分来介绍,首先介绍一下Maven的仓库,然 ... -
Java枚举类
2010-04-13 11:30 68111.创建一个最简单的枚 ... -
Java堆.栈和常量池 笔记
2010-04-07 09:26 12281.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程 ... -
探讨代理模式与Java反射机制的应用
2010-04-01 09:53 1087代理模式,相信大多数人都非常熟悉,常见的实现方式是通过公共接 ... -
Java多线程编程要点
2010-03-31 09:30 11111、 认识Thread和Runnable Java中实现 ... -
Missing com.sun.jdmk:jmxtools:jar:1.2.1
2010-01-11 21:11 24473错误代码如下: 1 /10/08 4:42:40 PM C ...
相关推荐
1. **定义接口**:首先定义一个公共接口,接口中声明了目标对象需要实现的方法。 2. **实现目标类**:创建一个实现了接口的目标类,该类完成实际业务逻辑。 3. **创建代理类**:创建一个代理类,同样实现接口,代理...
抽象主题角色定义了公共接口,真实主题角色实现了这些接口的实际业务逻辑,而代理主题角色则实现相同接口,并持有真实主题的引用,用于在调用真实主题之前或之后执行额外的操作。 动态代理则是Java在JDK 1.3之后...
总的来说,Java 代理模式是通过代理类来增强或扩展目标类功能的一种设计模式,尤其适用于需要在调用前后添加额外逻辑的场景。通过深入理解代理模式和其在房屋买卖场景中的应用,我们可以更好地掌握这一重要的设计...
在Java中,动态代理是代理模式的一种实现方式,它允许我们在运行时创建代理对象,这种方式比静态代理更加灵活。动态代理在JDK 1.3及以后的版本中得到了支持,主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`...
工厂模式则通过一个公共接口创建对象,使得代码更易于扩展和维护。观察者模式(Observer)让多个对象能够监听并响应某个对象的状态变化,这是事件驱动编程的基础。 "Java与模式"资料可能涵盖了23种GOF(GoF,Gang ...
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过一个公共接口来生产不同类型的实例,而不是直接创建它们。在Java中,你可以定义一个接口或抽象类作为工厂接口,然后为每种...
Java中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口可以实现动态代理。动态代理在Android中常用于实现事件监听、AOP(面向切面编程)等场景。 **Android中的应用** 1. **数据加载**...
Java中,可以通过定义访问者接口和元素接口实现。 16. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。Java中的`Serializable`接口可用于实现对象的序列化,达到...
静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),代理类通常与原始对象实现相同的接口,以便在客户端代码中可以透明地调用。代理类可以在调用真实对象的方法前后添加额外的操作,...
动态代理是Java特有的,通过java.lang.reflect包下的Proxy类和InvocationHandler接口实现,可以在运行时动态生成代理对象。 策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相...
1. **定义接口**:首先,我们需要定义一个公共接口,该接口描述了真实对象和代理对象需要共同实现的行为。 ```java public interface Service { void execute(); } ``` 2. **创建真实对象**:接着,创建一个实现了...
- 工厂模式(Factory):工厂模式是一种最基础的创建型模式,它提供了一种创建对象的最佳方式,通过一个公共接口来封装一系列的对象创建过程,使客户端无需关心对象的创建细节。 - 原型模式(Prototype):原型...
在这个“java代理实例”中,我们将会深入探讨Java动态代理(Dynamic Proxy)以及静态代理(Static Proxy)的概念,这两种方法都是实现代理模式的关键。 一、Java动态代理 动态代理是Java内置的机制,主要依赖于`...
1. **定义接口**:定义一个公共接口,所有参与代理的类都必须实现这个接口。 2. **实现接口**:创建实现该接口的具体类。 3. **实现InvocationHandler**:创建一个实现了`InvocationHandler`接口的类,并重写`invoke...
代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们通过一个对象来控制对另一个对象的访问。在Java和Spring框架中,动态代理更是扮演着重要角色,尤其是在实现面向切面编程(AOP)时...
* 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * * 作用 * 1.保护被代理对象 * 2.增强被代理对象 * 3.完全...
例如,Java的枚举类型可以方便地实现单例模式,而动态代理则可以简化代理模式的实现。 通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的...
代理模式通过创建一个对象来控制对另一个对象的访问,它属于结构型设计模式之一。 #### 二、代理模式分类 代理模式主要分为两大类:静态代理和动态代理。 1. **静态代理**: - **定义**:静态代理由程序员创建或...