`

动态代理入门

 
阅读更多

使用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动态代理 经典文章(word 2007格式的)

    Java动态代理是Java编程中一个重要的特性,它允许在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理主要应用于面向切面编程(AOP)和事件监听等场景,使得代码更加模块化,易于维护。以下是...

    服务网格代理Envoy入门.zip

    在这个“服务网格代理Envoy入门”资料中,我们将会深入探讨Envoy的基本概念、核心功能以及如何在Java驱动的微服务环境中集成和使用Envoy。 1. **Envoy简介** Envoy是由Lyft开发的一款高性能、语言无关的边缘和服务...

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

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

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

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

    静态代理与动态代理小Demo

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

    (入门)什么是AOP?什么是代理模式?怎么设计日志拦截器?

    静态代理是在编译时就已经确定了代理类,而动态代理则是在运行时动态创建的。Java中,JDK的Proxy类和CGLIB库可以实现动态代理。 日志拦截器是AOP的一个常见应用场景。在Spring框架中,我们可以利用AOP和代理模式来...

    CGLIB入门实例.doc

    CGLIB,全称为Code Generation Library,是一种代码生成库,主要用在Java应用程序中,尤其在需要进行动态代理或者运行时织入增强功能的场景。它底层基于ASM库,但为开发者提供了更友好的API,简化了对Java字节码的...

    ios入门项目 超级入门

    在 storyboard 中,可以通过拖拽并设置关系来创建选项卡,或者通过代码动态添加和配置。 2. SAX解析: Simple API for XML (SAX) 是一种轻量级的XML解析器,适用于处理大型XML文档。在iOS中,我们可以使用...

    WINDOWS SERVER 2003从入门到精通.rar

    《WINDOWS SERVER 2003从入门到精通之DHCP中继代理》讲解了如何配置DHCP中继代理,使DHCP服务能够跨越多个子网提供IP地址配置,这对于多子网环境的网络至关重要。 七、DNS服务 《WINDOWS SERVER 2003从入门到精通之...

    WCF入门及WinForm中动态调用

    在**WCF入门**阶段,我们需要了解以下几个核心概念: 1. **服务**:WCF服务是对外提供功能的实体,通过服务契约定义接口和实现。 2. **服务契约**:定义了服务提供的操作和数据类型,通常使用接口(Interface)来...

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

    1. **入门**: Mybatis的使用首先需要创建一个配置文件(mybatis-config.xml),在此文件中定义数据源、事务管理器以及Mappers的路径。然后,通过SqlSessionFactoryBuilder创建SqlSessionFactory,它是Mybatis的...

    Nginx知识体系入门实践.zip

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

    Hibernate入门jar包

    - `cglib-nodep.jar`和`asm.jar`:这两个库通常用于动态代理和字节码操作,Hibernate在处理实体类的动态代理时可能会用到。 - `dom4j.jar`或`jdom.jar`:XML处理库,Hibernate的HQL查询结果集转换为XML时会用到。 ...

    Nginx开发从入门到精通pdf高清带目录

    读者将学习如何安装Nginx,创建基本的配置文件,以及如何配置服务器块来托管静态文件、动态内容和反向代理。书中会有大量实例展示如何编写和调试配置文件,确保服务器正确运行。 Nginx的模块化设计是其强大之处。...

    Java基础入门.pdf

    Java基础入门 本文档旨在为初学者提供Java基础知识的概述,涵盖了Java是什么、Java能做什么和Java怎样改变我的生活等问题的答案。 什么是Java? Java是一种高级程序语言,也是一个平台。它具有以下特征:简单、...

    Java入门到精通完整教程+源码.zip

    反射允许你在运行时检查和修改类的信息,这在插件系统和动态代理中非常有用。 此外,你还将学习Java的泛型,它提供了类型安全,减少了在编译时和运行时的错误。还有Java的接口和模块化,这些是大型项目中保持代码...

    Spring 入门案例——AOP

    5. **自动代理(Auto Proxy)**:Spring AOP默认使用Java动态代理或CGLIB生成代理对象,以便在调用目标方法时插入通知。 案例中的"Spring_2_AOP"可能包含了以下内容: - 示例代码展示了如何定义一个切面,包括通知...

    Java8 前的最新经典 Java入门经典 code

    7. **反射与动态代理**:反射机制允许程序在运行时检查类的信息并操作类的对象,而动态代理则可以生成接口的代理类,实现动态调用处理。这两个特性在高级编程和框架开发中经常用到。 8. **泛型**:泛型的引入提高了...

    Nginx 快速入门

    ### Nginx 快速入门知识点详解 #### 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理Web服务器软件,由俄罗斯程序员Igor Sysoev开发。它以其高性能、稳定性、丰富的功能集、简单的配置文件以及低资源消耗而闻名...

    Spring从入门到精通

    Spring AOP通过动态代理技术实现,提供了注解和XML配置两种方式来定义切面。 数据库操作是企业级应用不可或缺的一部分。Spring JDBC和MyBatis集成使得数据库访问更加简单。Spring JDBC提供了一种模板化的JDBC抽象层...

Global site tag (gtag.js) - Google Analytics