`
bo_hai
  • 浏览: 565863 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

动态代理的实现

 
阅读更多
public interface IHelloWorld {

	void sayHello();
	void sayBye();
	void saySomething(String msg);
}

 实例类如下:

public class HelloWorld implements IHelloWorld {

	@Override
	public void sayHello() {
		System.out.println("Hello World");
	}

	@Override
	public void sayBye() {
		System.out.println("Bye");
	}

	@Override
	public void saySomething(String msg) {
		System.out.println("I want to say :I love you");
	}

}

 handler的实现类:

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

public class ReflectProxy implements InvocationHandler {

	private Object proxyObject;
	
	public ReflectProxy(Object proxyObject) {
		this.proxyObject = proxyObject;
	} 
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)	throws Throwable {
		doBeforeCalling(method);
		method.invoke(proxyObject, args);
		doAfterCalling(method);
		return null;
	}

	private void doBeforeCalling(Method method) {
		System.out.println("before calling [" + method.getName() + "]");
	}
	
	private void doAfterCalling(Method method) {
		System.out.println("after calling [" + method.getName() + "]");
	}
}

 测试类如下:

import java.lang.reflect.Proxy;

public class ReflectProxyText {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HelloWorld helloworld = new HelloWorld();
		ReflectProxy handler  = new ReflectProxy(helloworld);
		IHelloWorld helloword = (IHelloWorld)Proxy.newProxyInstance(helloworld.getClass().getClassLoader(), helloworld.getClass().getInterfaces(), handler);
		helloword.sayHello();
	}
}

 Spring中的通知功能也许就是使用动态代码实现的。

分享到:
评论

相关推荐

    ioc框架,通过动态代理实现.

    在学习和应用IOC框架,尤其是通过动态代理实现时,我们需要了解以下知识点: 1. IOC的基本原理和实现机制,包括依赖注入(Dependency Injection)的概念。 2. 如何配置IOC容器,如XML配置或注解配置。 3. 如何使用...

    用Java动态代理实现AOP

    Java动态代理实现AOP Java动态代理是实现Aspect Oriented Programming(AOP)的重要手段。在Java中,动态代理可以通过java.lang.reflect InvocationHandler接口和java.lang.reflect.Proxy类来实现。AOP的主要思想...

    使用JAVA中的动态代理实现数据库连接池

    以下是一个简单的示例,展示如何使用动态代理实现数据库连接池: 1. 定义数据库连接池参数类(如`DBPoolConfig`),存储JDBC驱动类名、URL、用户名和密码等信息,用于初始化连接池。 ```java public class ...

    由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理

    本文将由浅入深地分析 MyBatis 如何通过动态代理实现拦截器的原理。 首先,我们需要了解动态代理的概念。在 Java 中,动态代理是通过 `java.lang.reflect.Proxy` 类和 `java.lang.reflect.InvocationHandler` 接口...

    动态代理实现AOP思想

    以下是一个简单的例子,展示了如何使用Java动态代理实现AOP: ```java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface MyInterface {...

    java 动态代理实现AOP

    ### Java动态代理实现AOP详解 #### 一、引言 随着软件开发复杂度的提升,传统的面向对象编程(OOP)已经难以满足现代软件工程的需求。为了更好地管理跨切面的关注点,如日志记录、性能监控、安全控制等,面向切面...

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 .md

    在Java中,最常用的动态代理实现有两种:JDK Proxy和CGLIB。 - **JDK Proxy**:基于Java反射API实现,仅支持接口的代理。使用JDK Proxy时,需要指定被代理接口的类型,并且代理类必须实现该接口。 - **CGLIB**:...

    JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)

    Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...

    动态代理实现aop

    ### 动态代理实现AOP #### 概述 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在通过将横切关注点与业务逻辑分离来提高系统的模块化程度。本篇文章主要介绍了如何利用Java动态代理技术...

    AOP技术及其在J2EE中动态代理实现

    在J2EE(Java 2 Platform, Enterprise Edition)环境中,AOP的动态代理实现机制是一种常用的技术手段,它利用了Java的反射机制。Java的动态代理可以分为接口型和类型两种。接口型动态代理要求目标对象实现一个接口,...

    Java动态代理实现数据源连接池

    但是,理解如何通过动态代理实现数据源连接池可以帮助我们更好地理解这种机制,并且在某些特定场景下,自定义实现可能会更加灵活。 首先,我们需要了解`InvocationHandler`接口。这个接口只有一个方法`invoke()`,...

    动态代理实现文件.....

    这里我们将深入探讨Java中的两种主要动态代理实现:JDK动态代理和CGLIB动态代理,以及静态代理作为基础概念的介绍。 首先,我们来看静态代理。静态代理是代理模式的一种实现方式,它要求我们为每个目标接口创建一个...

    java动态代理实现数据库连接池

    ### Java动态代理实现数据库连接池 #### 背景与挑战 在开发应用程序时,数据库连接池是一个常用且重要的组成部分。频繁地建立和断开数据库连接不仅效率低下,还可能导致性能瓶颈。为了解决这一问题,引入了数据库...

    用Java动态代理实现委托模式

    下面我们将详细探讨如何使用Java动态代理实现委托模式,以及相关的源码和工具应用。 首先,理解委托模式的基本概念。委托模式通常由三部分组成:委托者(Delegate)、被委托者(Subject)和客户端(Client)。委托...

    动态代理实现AOP机制

    动态代理是实现AOP的一种常见手段,尤其在Java中应用广泛。 动态代理主要分为JDK动态代理和CGLIB动态代理两种方式: 1. **JDK动态代理**: JDK动态代理基于接口实现,它通过`java.lang.reflect.Proxy`类和`java....

    基于JAVA的动态代理实现的AOP的研究.pdf

    以下是如何利用动态代理实现AOP的基本步骤: 1. 创建一个接口,定义横切关注点所涉及的方法。 2. 创建一个实现该接口的类,实现具体的功能逻辑。 3. 实现InvocationHandler接口,覆写invoke方法。在invoke方法中,...

Global site tag (gtag.js) - Google Analytics