使用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动态代理是Java编程中一个重要的特性,它允许在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理主要应用于面向切面编程(AOP)和事件监听等场景,使得代码更加模块化,易于维护。以下是...
在这个“服务网格代理Envoy入门”资料中,我们将会深入探讨Envoy的基本概念、核心功能以及如何在Java驱动的微服务环境中集成和使用Envoy。 1. **Envoy简介** Envoy是由Lyft开发的一款高性能、语言无关的边缘和服务...
内容概要:动态代理学习笔记,适合刚接触maven的人能让你快速入门。 适用人群:大学生或者初接触动态代理的人 使用场景及目标:mybatis框架的前驱知识
spring framework入门(6):java中的动态代理(jdk和cglib) 博客地址:https://blog.csdn.net/u010476739/article/details/76737460
一个静态代理和动态代理的小例子,开发时使用的工具是myeclipse,直接使用myeclipse工具导入即可,希望能 给大家理解这方面的入门知识带来些作用,同时也希望大家指出不足,我可以更加进行改进
静态代理是在编译时就已经确定了代理类,而动态代理则是在运行时动态创建的。Java中,JDK的Proxy类和CGLIB库可以实现动态代理。 日志拦截器是AOP的一个常见应用场景。在Spring框架中,我们可以利用AOP和代理模式来...
CGLIB,全称为Code Generation Library,是一种代码生成库,主要用在Java应用程序中,尤其在需要进行动态代理或者运行时织入增强功能的场景。它底层基于ASM库,但为开发者提供了更友好的API,简化了对Java字节码的...
在 storyboard 中,可以通过拖拽并设置关系来创建选项卡,或者通过代码动态添加和配置。 2. SAX解析: Simple API for XML (SAX) 是一种轻量级的XML解析器,适用于处理大型XML文档。在iOS中,我们可以使用...
《WINDOWS SERVER 2003从入门到精通之DHCP中继代理》讲解了如何配置DHCP中继代理,使DHCP服务能够跨越多个子网提供IP地址配置,这对于多子网环境的网络至关重要。 七、DNS服务 《WINDOWS SERVER 2003从入门到精通之...
在**WCF入门**阶段,我们需要了解以下几个核心概念: 1. **服务**:WCF服务是对外提供功能的实体,通过服务契约定义接口和实现。 2. **服务契约**:定义了服务提供的操作和数据类型,通常使用接口(Interface)来...
1. **入门**: Mybatis的使用首先需要创建一个配置文件(mybatis-config.xml),在此文件中定义数据源、事务管理器以及Mappers的路径。然后,通过SqlSessionFactoryBuilder创建SqlSessionFactory,它是Mybatis的...
01.Nginx快速入门 02.Nginx常用模块 03.Nginx提供静态资源WEB服务 04.Nginx提供代理服务 05.Nginx提供负载均衡 06.Nginx提供ProxyCache缓存服务 07.Nginx Rewrite跳转规则与实践 08.Nginx构建Https加密传输网站(基于...
- `cglib-nodep.jar`和`asm.jar`:这两个库通常用于动态代理和字节码操作,Hibernate在处理实体类的动态代理时可能会用到。 - `dom4j.jar`或`jdom.jar`:XML处理库,Hibernate的HQL查询结果集转换为XML时会用到。 ...
读者将学习如何安装Nginx,创建基本的配置文件,以及如何配置服务器块来托管静态文件、动态内容和反向代理。书中会有大量实例展示如何编写和调试配置文件,确保服务器正确运行。 Nginx的模块化设计是其强大之处。...
Java基础入门 本文档旨在为初学者提供Java基础知识的概述,涵盖了Java是什么、Java能做什么和Java怎样改变我的生活等问题的答案。 什么是Java? Java是一种高级程序语言,也是一个平台。它具有以下特征:简单、...
反射允许你在运行时检查和修改类的信息,这在插件系统和动态代理中非常有用。 此外,你还将学习Java的泛型,它提供了类型安全,减少了在编译时和运行时的错误。还有Java的接口和模块化,这些是大型项目中保持代码...
5. **自动代理(Auto Proxy)**:Spring AOP默认使用Java动态代理或CGLIB生成代理对象,以便在调用目标方法时插入通知。 案例中的"Spring_2_AOP"可能包含了以下内容: - 示例代码展示了如何定义一个切面,包括通知...
7. **反射与动态代理**:反射机制允许程序在运行时检查类的信息并操作类的对象,而动态代理则可以生成接口的代理类,实现动态调用处理。这两个特性在高级编程和框架开发中经常用到。 8. **泛型**:泛型的引入提高了...
### Nginx 快速入门知识点详解 #### 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理Web服务器软件,由俄罗斯程序员Igor Sysoev开发。它以其高性能、稳定性、丰富的功能集、简单的配置文件以及低资源消耗而闻名...
Spring AOP通过动态代理技术实现,提供了注解和XML配置两种方式来定义切面。 数据库操作是企业级应用不可或缺的一部分。Spring JDBC和MyBatis集成使得数据库访问更加简单。Spring JDBC提供了一种模板化的JDBC抽象层...