文档章节

java动态代理模式示例

Jay丶
 Jay丶
发布于 2017/07/26 10:14
字数 401
阅读 1
收藏 0

代理设计模式

定义:为其他对象提供一种代理以控制对这个对象的访问。

1.定义接口

package com.tuozq.demo.proxy;
/**
 * @class Subject.java
 * @author tuozq
 * @date 2017年7月26日 上午9:34:30
 * @descriptions
 */
public interface ISubject {
	public void doSomething();

	public void working();
}

2.添加接口的实现类

package com.tuozq.demo.proxy;
/**
 * @class SubjectImpl.java
 * @author tuozq
 * @date 2017年7月26日 上午9:35:48
 * @descriptions
 */
public class SubjectImpl implements ISubject {

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		System.out.println("SubjectImpl : doSomething……");
	}

	@Override
	public void working() {
		// TODO Auto-generated method stub
		System.out.println("SubjectImpl : working……");

	}

}

3.动态代理 实现 InvocationHandler 接口 重写 invoke方法

package com.tuozq.demo.proxy;

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

import javax.naming.spi.DirStateFactory.Result;


/**
 * @class SubjectProxyHandler.java
 * @author tuozq
 * @date 2017年7月26日 上午9:36:51
 * @descriptions
 */
public class SubjectProxyHandler implements InvocationHandler {

	//被代理对象
	private Object proxyObj;

	public SubjectProxyHandler( Object proxyObj )
	{
		this.proxyObj = proxyObj;
	}


	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub

		System.out.println(method.getName() + " before……");

		Object result = method.invoke(proxyObj, args);

		System.out.println(method.getName() + " after……");

		return result;
	}

}

另一种实现方式  

package com.tuozq.demo.proxy;

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

/**
 * @class ProxyFactory.java
 * @author tuozq
 * @date 2017年7月28日 上午9:07:31
 * @descriptions
 */
public class ProxyFactory {

	public static Object getProxyInstance(final Object target){
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
			@Override
			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				// TODO Auto-generated method stub
				System.out.println(method.getName() + " before");
				Object result = method.invoke(target, args);
				System.out.println(method.getName() + " after");
				return result;
			}

		});
	}
}

4.运行测试

package com.tuozq.demo.proxy;

import java.lang.reflect.Proxy;

import javax.security.auth.Subject;

/**
 * @class ProxyTest.java
 * @author tuozq
 * @date 2017年7月26日 上午9:40:35
 * @descriptions
 */
public class ProxyTest {

	public static void main(String[] args) {
		SubjectImpl sub = new SubjectImpl();
		ISubject Isub = (ISubject) Proxy.newProxyInstance(ISubject.class.getClassLoader(), new Class[]{ISubject.class}, new SubjectProxyHandler(sub));
		Isub.working();
	}
}

 

© 著作权归作者所有

共有 人打赏支持
Jay丶
粉丝 2
博文 54
码字总数 23242
作品 0
深圳
程序员
设计模式3——Proxy设计模式

Proxy代理设计模式是一种控制对象访问的设计模式,类似于网络代理,网络代理机制如下图: Proxy代理设计模式机制如下: 代理模式UML图如下: 代理模式顺序图如下: 客户端程序通过代理程序来...

小米米儿小
2013/12/06
0
0
JAVA代理模式与动态代理模式

1、代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介...

lee123lee
2013/08/30
0
0
20个设计模式和软件设计面试问题

不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎...

LCZ777
2014/08/13
0
0
java中23种设计模式(上)

参考网址:http://blog.csdn.net/zhangerqing 资源:http://download.csdn.net/detail/zhangerqing/4835830 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用、多数...

青涩的梦
06/26
0
0
python 与设计模式 ——工厂与单例

python 与设计模式 源码地址:[http://git.oschina.net/duoduo3_69/python_design_pattern][1] git checkout v001(这个版本与此篇博客相符) zarkpy里面运用了很多设计模式,以前一直很费解p...

duoduo3_69
2013/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高三暑假我是怎么想开去学linux系统的

高三的时候,我有一句口头禅:“老了老了,现在做题越来越迟钝了”。当时整天日夜苦读,体重日益增加,脸色越来越黯淡,我在终于熬过了高考的时候,简直心里面乐得开了花。我终于可以去做自己...

linuxprobe16
24分钟前
0
0
Python 获得命令行参数的方法

需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2]

编程老陆
31分钟前
0
0
链队

队列用链表来表示时,需要用两个变量来记录队列两端的变化:theFront,theBack. 根据链接方向的不同,链队有两种链接方式(其实就是链表的头插入节点和尾插入节点,头删除节点和尾删除节点)。...

Frost729
35分钟前
0
0
IDEA toString() json模板

public java.lang.String toString() {java.lang.StringBuilder builder = new java.lang.StringBuilder();#set ($i = 0)#foreach ($member in $members)#if ($i == 0)builder.appen......

Mtok
45分钟前
0
0
Dubbo内核实现之SPI简单介绍

Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLo...

明理萝
50分钟前
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部