关于Proxy:

1,他是所有动态代理的父类;

2,他可以用作创建动态代理类和动态代理对象;

3,JDK中自带的动态代理。

1,首先创建一个接口,方法申明如下:

package com.proxy;

public interface IDog {
public void bark();
public void guard(); }

2,再创建需要代理的类,并且实现上面的接口:

package com.proxy;

public class ADog implements IDog{

    @Override
public void bark() {
System.out.println("卖萌");
} @Override
public void guard() {
System.out.println("耍宝");
} }

3,首先创建一个动态代理类,并且实现invocationHandler,具体代码如下:



package com.proxy;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;


public class DogHandler implements InvocationHandler{
IDog Dgod ;
public DogHandler() {
}
public DogHandler(IDog dog) {
this.Dgod = dog;
}
/**重写了invactionHandler的方法
*参数发疯别为:被代理对象 需要调用的方法 方法中的参数
*方法传进去后,利用反射调用方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开始");
method.invoke(Dgod, args);
System.out.println("结束");
return null;
}

}

 

4,写道此处动态代理就完成了,下面i进入测试阶段;代码如下


package com.proxy;


import java.lang.reflect.Proxy;


public class Client {
public static void main(String[] args) {
//创建一个真实对象,用作实参传入DogHandler方法(处理器方法)
IDog dog = new ADog();
//创建处理器对象
DogHandler handler = new DogHandler(dog);
//利用Proxy.newProxyInstance方法创建代理对象,并且把对应的参数传入
//注意
IDog proxy = (IDog)Proxy.newProxyInstance(dog.getClass().getClassLoader(), dog.getClass().getInterfaces(), handler);
//调用方法
proxy.bark();
}
}

 

优点:由于每次调用代理对象的方法都会调用public Object invoke(Object proxy, Method method, Object[] args)方法,所以可以在此方法中调用一些重复性较高的代码,以此提高代码的可读性和可维护性。

Java设计模式之动态代理的更多相关文章

  1. Java设计模式—Proxy动态代理模式

    代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代 ...

  2. java设计模式之动态代理的概述和实现

    概述 1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象. 举例:春节回家买票让人代买 2.在Java中java.lang.reflect包下提供了一个Proxy类和一个Invocat ...

  3. java 笔记(3) —— 动态代理,静态代理,cglib代理

    0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...

  4. 杨晓峰-Java核心技术-6 动态代理 反射 MD

    目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...

  5. 十分钟理解Java中的动态代理

    十分钟理解 Java 中的动态代理   一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...

  6. 一文读懂Java中的动态代理

    从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...

  7. java反射和动态代理实现与原理详细分析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式    代理模式是常用的java设计模式, ...

  8. 使用Java中的动态代理实现数据库连接池

    2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...

  9. java中的动态代理机制

    java中的动态代理机制 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现 ...

随机推荐

  1. 2018.我的NOIP补全计划

    code: efzoi.tk @ shleodai noip2011 D1 选择客栈 这道题是一道大水题,冷静分析一会就会发现我们需要维护最后一个不合法点和前缀和. 维护最后一个不合法点只要边扫描边维 ...

  2. JQuery 绑定单击事件到某个函数的的方法

    <script> function 我会在加载完页面马上执行() { alert('我会在加载完页面马上执行'); } function 我只会在按钮点击时才执行() { alert('我 ...

  3. centos7安装python3 以及tab补全功能

    1.安装python3 1.1下载python源码包 网址:https://www.python.org/downloads/release/python-362/ 下载地址:https://www. ...

  4. 【管理篇】用户故事STORY

    项目管理中,常常听说story,用户故事 “一开始就做对系统”纯属神话,反之,我们应该去实现今天的用户故事,然后重构,明天再拓展系统.实现新的用户故事.这就是迭代和增量敏捷的精粹所在.

  5. php发送短信验证码

    业务: 手机端点击发送验证码,请求发送到php端,由php调用榛子云短信http://smsow.zhenzikj.com的短信接口,生成验证码并发送. SDK下载: http://smsow.zhe ...

  6. getsockopt和setsockopt函数

    在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项. getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optv ...

  7. Hibernate-day02

    OID 1,对象里面没有主键的概念,对象中对应主键的属性,称为OID(对象标识符);2,OID用来唯一标明一个对象实体(加上对象类型)3,OID在对象里面不见得只有一个属性;(映射复合主键)4,OID ...

  8. Troubleshooting tips for using Java on Windows 8

    This article applies to: Platform(s): Windows 8 Will Java run in Start screen on Windows 8? Microsof ...

  9. 上传及更新代码到github(以及如何在vscode上提交自己的代码)

    上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> ...

  10. session and cookie

    cookie cookie是由W3C组织提出,最早由Netscape社区发展的一种机制.目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.Opera等都支持Coo ...