`

动态代理入门

 
阅读更多

使用InvocationHandler实现动态代理,也就是我们常说的代理模式的一种实现方式之一:(这也是从其他的地方找过来的,很浅显易懂,非原创)

 

 上代码:

 IHello接口:

public interface IHello
{
	public void hello(String name);
}

 

IHelloImpl:

/**
 * @copyright  XXX
 */
package com.yourcompany.struts.proxy;

/**
 * @author meemac
 *
 */
public class HelloImpl implements IHello
{

	/* (non-Javadoc)
	 * @see com.yourcompany.struts.proxy.IHello#hello(java.lang.String)
	 */
	public void hello(String name)
	{
		// TODO Auto-generated method stub
		System.out.println("Hello"+name);
	}

}

 

代理类:

/**
 * @copyright  XXX
 */
package com.yourcompany.struts.proxy;

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

/**
 * @author meemac
 * 
 */
public class HelloProxyImpl implements InvocationHandler
{
	private Object delegate;

	public Object bind(Object delegate)
	{
		this.delegate = delegate;
		return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
				delegate.getClass().getInterfaces(), this);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
	 * java.lang.reflect.Method, java.lang.Object[])
	 */
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable
	{
		Object result = null;
		print("call before  :" + method);
		result = method.invoke(delegate, args);
		print("call after :" + method);
		return result;
	}

	private void print(String message)
	{
		System.out.println(message);

	}
}

  

 

 

  测试类:

/**
 * @copyright  XXX
 */
package com.yourcompany.struts.proxy;


/**
 * @author meemac
 * 
 */
public class Demo
{
	public static void main(String[] args)
	{
		HelloProxyImpl helloProxyImpl = new HelloProxyImpl();
		IHello hello = (IHello) helloProxyImpl.bind(new HelloImpl());
		hello.hello("你妹的,我测试下.");

	}
}

 

分享到:
评论

相关推荐

    Java静态代理与动态代理demo

    这里提供了静态代理和动态代理的入门写法~一看即懂!

    java 动态代理实现AOP

    讲述JAVA的动态代理的原理,以及通过JAVA的动态代理来实现AOP。简洁,易懂,学习AOP的入门级文档

    什么是动态代理,动态代理笔记

    内容概要:动态代理学习笔记,适合刚接触maven的人能让你快速入门。 适用人群:大学生或者初接触动态代理的人 使用场景及目标:mybatis框架的前驱知识

    反射和动态代理(reflect and proxy)---含源码

    深入地探讨反射和动态代理技术,其中例子详细明白。使初学者比较容易入门!

    spring framework入门(6):java中的动态代理(jdk和cglib)

    spring framework入门(6):java中的动态代理(jdk和cglib) 博客地址:https://blog.csdn.net/u010476739/article/details/76737460

    静态代理与动态代理小Demo

    一个静态代理和动态代理的小例子,开发时使用的工具是myeclipse,直接使用myeclipse工具导入即可,希望能 给大家理解这方面的入门知识带来些作用,同时也希望大家指出不足,我可以更加进行改进

    Nginx知识体系入门实践.zip

    01.Nginx快速入门 02.Nginx常用模块 03.Nginx提供静态资源WEB服务 04.Nginx提供代理服务 05.Nginx提供负载均衡 06.Nginx提供ProxyCache缓存服务 07.Nginx Rewrite跳转规则与实践 08.Nginx构建Https加密传输网站(基于...

    SpringAOP入门和原理

    SpringAOP入门和原理分析,动态代理

    Spring从入门到精通全套教程.zip

    本套课程是Spring入门到精通教程,课程包括Spring IoC、Spring AOP(CGLib、JDK动态代理)、Spring整合MyBatis,Spring事务管理等内容。 通过本套课程的学习,你将掌握: 1、 IoC和依赖注入 2、 AOP的原理和实际...

    Java基础入门教程

    java基础入门,GitBook本地命令行生成,等线字体版目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性,内存管理。

    MyBatis入门以及提高

    ② :mybaits的mapper(代理)接口(相当于dao接口)代理开发方法(掌握)第二种要掌握 mybatis配置文件SqlMapConfig.xml*** mybatis核心: mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis的动态...

    LINQ入门及应用 11/13

     3.3.3 动态谓词的筛选  3.4 select子句  3.4.1 输出查询结果  3.4.2 对查询结果进行投影  3.5 group子句  3.5.1 IGrouping泛型接口  3.5.2 分组查询  3.6 into子句  3.7 排序子句  3.7.1 OrderBy和...

    SpringBoot下的SpringAOP-day04-源代码

    SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法 1.动态代理总结 1.1 JDK动态代理特点 1.2 CGlib动态代理 1.2.1 CGLib特点说明 1.3 动态代理的作用 2 Spring...

    Mybatis的介绍与入门

    Mybatis的介绍、入门、使用jdbc操作数据库存在的问题、Mybatis的架构 、Mybatis的入门程序、Dao的开发方法(原始dao的开发方法、接口的动态代理方式) SqlMapConfig.xml文件说明

    LINQ入门及应用 8/13

     3.3.3 动态谓词的筛选  3.4 select子句  3.4.1 输出查询结果  3.4.2 对查询结果进行投影  3.5 group子句  3.5.1 IGrouping泛型接口  3.5.2 分组查询  3.6 into子句  3.7 排序子句  3.7.1 OrderBy和...

    SSH入门实战式课程 SSH框架前言全套视频实战精讲视频教程.txt

    │ 北京动力节点SSH前言-007-代理模式-静态代理与动态代理.mp4 │ 北京动力节点SSH前言-008-代理模式-静态代理测试环境的搭建.mp4 │ 北京动力节点SSH前言-009-代理模式-解决快捷键冲突问题.mp4 │ 北京动力节点SSH...

    LINQ入门及应用 1/13

     3.3.3 动态谓词的筛选  3.4 select子句  3.4.1 输出查询结果  3.4.2 对查询结果进行投影  3.5 group子句  3.5.1 IGrouping泛型接口  3.5.2 分组查询  3.6 into子句  3.7 排序子句  3.7.1 OrderBy和...

    Mybatis 入门、Dao开发模式、Mapper代理开发模式、动态sql、一对一、一对多、多对多

    程序代码

    COM与COM+从入门到精通(pdf版本,含源码)

    动态负荷平衡 对象地 小结 第12章 用VC++建立COM++组件 ADO编程 ADO与OLEDB VC++中的ADO VC++的ADO扩展 建立COM++应用程序 温习IObjectContext接口 用ATL建立COM++组件 编制基于角色的安全...

Global site tag (gtag.js) - Google Analytics