`

Dynamic Proxy模式

 
阅读更多

ProxyFactory类

package com.zzq.proxy;

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

public class ProxyFactory implements InvocationHandler{
 
	private Object target;
	
	public ProxyFactory() {}
	
	public void setTarget(Object target) {
		this.target = target;
	}

	public Object createProxyBean() {
		
		return Proxy.newProxyInstance(
					target.getClass().getClassLoader(), 
					target.getClass().getInterfaces(), 
					this
				);
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		Object result = null;
		try {
			this.before();
			
			result = method.invoke(target, args);
			
			this.afert();
		} catch (Exception e) {
			afterThrow(e);
		}
		return result;
	}
	
	public void before() {
		System.out.println("before");
	}
	
	public void afert() {
		System.out.println("afert");
	}
	
	public void afterThrow(Throwable t) {
		System.out.println("afterThrow");
		
		if(t instanceof InvocationTargetException) {
			t = t.getCause();
			System.out.println(t.getMessage());
		} else {
			System.out.println(t.getMessage());
		}
	}
}

 

package com.zzq.proxy;

public interface SimpleBean {

	public void sayHello();
	
	public void throwException();
}

 

package com.zzq.proxy;

public class SimpleBeanImpl implements SimpleBean {

	public void sayHello() {
		System.out.println("hello proxy pattern!");
	}
	
	public void throwException() {
		throw new RuntimeException("出错了");
	}
	
	public static void main(String[] args) {
		ProxyFactory factory = new ProxyFactory();
		
		factory.setTarget(new SimpleBeanImpl());
		
		SimpleBean proxy = (SimpleBean)factory.createProxyBean();
		
		proxy.sayHello();
		
		proxy.throwException();
	}
}

 

分享到:
评论

相关推荐

    dynamic-proxy-demo.zip

    动态代理&静态代理

    23种java版设计模式源码案例.zip

    代理模式(proxy) 行为型模式(behaviour) 责任链模式(chainrespon) 命令模式(commond) 解释器模式(interpreter) 迭代器模式(iterator) 中介者模式(mediator) 备忘录模式(memento) 观察者模式(observer) 状态模式...

    基于七层架构的MVC模式电子商务网站【源码】

    LinFu.DynamicProxy -- 1.0.3.14911 log4net -- 1.2.10.0 NHibernate -- 2.1.0.2002 NHibernate.ByteCode.LinFu -- 2.1.0.2002 StructureMap -- 2.5.3.0 ☆ 开发环境 ☆ 开发工具:Microsoft Visual Studio 2010 ...

    [源代码] .NET学架构之框架赏析 基于七层架构的MVC模式电子商务网站

    LinFu.DynamicProxy -- 1.0.3.14911 log4net -- 1.2.10.0 NHibernate -- 2.1.0.2002 NHibernate.ByteCode.LinFu -- 2.1.0.2002 StructureMap -- 2.5.3.0 ☆ 开发环境 ☆ 开发工具:Microsoft Visual Studio 2010 ...

    CQRS架构案例TinyLibraryCQRS详解:AOP拦截与异常处理

    DynamicProxy实现AOP拦截,因此针对AOP拦截部分的开发,我们需要借助CastleDynamicProxy框架。在此说明一下,虽然Apworks极力使用分离接口模式(Separated InterfacePattern,PoEAA)来降低核心模块对第三方组件的...

    Android代理模式简单Demo

    Android代理模式简单Demo,项目里面simple包下为原理,UML类图通用模式代码,demo包下为具体案例:律师lawyer代理user打官司,DynamicProxy为动态加载代理模式类.各自调用均在对应包的client;同步博文:...

    Spring开发指南

    Spring初探 准备工作 构建Spring基础代码 Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 ... Dynamic Proxy 与Spring AOP CGLib 与 Spring AOP AOP 应用 DAO Support Remoting

    设计模式:动态代理模式(ProxyPattern)学习指南

    本文来自csdn,本文全面讲解Android开发中最常用的设计模式-代理模式中的动态...设计动态代理类(DynamicProxy)时,不需要显式实现与目标对象类(RealSubject)相同的接口,而是将这种实现推迟到程序运行时由JVM来实

    Android代码-一个高效,使用方便,基于动态代理实现的Android事件总线库

    Latest version router 1.2.8 —— modified code to avoid concurrent bugs ...> what's dynamic proxy and how to use , see my blog 代理模式的学习与应用 Background EventBus is good ,but there are some pr

    二十三种设计模式【PDF版】

    设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) ...

    超市管理系统java源码swing-king-design:23种java设计模式

    代理模式(proxy) 行为型模式(behaviour) 责任链模式(chainrespon) 命令模式(commond) 解释器模式(interpreter) 迭代器模式(iterator) 中介者模式(mediator) 备忘录模式(memento) 观察者模式(observer) 状态模式...

    proxybuilder

    欢迎使用ProxyBuilder 欢迎使用ProxyBuilder ...什么是代理? 如果您想对代理模式本身有一个概述,我可以推荐以下资源。 我们要达到什么目标?...这是一些基于DynamicProxy的示例。 但是我们也创建了生成的静态版本.

    TucanySCA软件架构设计理念分析之二

    1.概述上一篇文章主要讲述了TuscanySCA的插件板模式及工厂模式的发展和提升,本文主要介绍TuscanySCA开源软件中动态代理模式(DynamicProxy)及方法调用Invocation。在使用TuscanySCA中,我们只需要写接口及实现类,...

    vs没报错leetcode报错-leetcode:leetcode

    basicKnowledge.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /* * JDK 动态代理 * */ public class dynamicProxyUsingJDK { ...

    book:Java案例|学习总结| .....

    Java Java学习案例库 Java案例目录 ... cn.liguohao.proxy.dynamic :动态代理 设计模式目录 参考《 Head First Java设计模式》 cn.liguohao.design.pattern.duck :面向接口编程 ...

    CISCO 技术大集合

    Configure for Dynamic IP addresses? [yes]: 7) 是否使用缺省IP地址: Configure Default IP addresses? [no]: yes 8) 是否使用TCP头压缩: Configure for TCP Header Compression? [yes]: 9) 是否在异步口上...

Global site tag (gtag.js) - Google Analytics