`
liaokang.java
  • 浏览: 155433 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java动态代理分析

    博客分类:
  • java
阅读更多
1.所谓动态代理类是这样一种class,首先它是在运行期生成的,而且在生成的过程当中实现了真实对象实现了的一系列接口,当然它不会帮你做实质性的工作,在生成它的过程当中你必须提供一个实现了InvocationHandler的实例,由它接管实际的工作

2.抽象角色
package com.lamp.reflect;

public interface IStudentAge {
	public void setAge(int age);
}

package com.lamp.reflect;

public interface IStudentName {
	public void setName(String name);
}

3.真实角色
package com.lamp.reflect;

public class StudentImpl implements IStudentName,IStudentAge{
	String name = null;
	int age = 0;
	public void setName(String name) {
		System.out.println("现在进入真实对象为属性name赋值");
		this.name = name;
	}

	public void setAge(int age) {
		System.out.println("现在进入真实对象为属性age赋值");
		this.age = age;
	}
	
}

4.代理处理器
package com.lamp.reflect;

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

public class DynamicProxy implements InvocationHandler {
	//object为真实对象的引用
	private Object object = null;
	
	public DynamicProxy(Object object){
		this.object = object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		if(args != null){
			for(Object obj: args){
				System.out.println(obj);
			}
		}
		
		//此时根据参数object调用真实对象方法
		method.invoke(object, args);
		return null;
	}

}


5.客户端调用
package com.lamp.reflect;

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

public class ClientTest {

	public static void main(String[] args) {
		StudentImpl student = new StudentImpl();
		InvocationHandler handler = new DynamicProxy(student);
		Class<?> clazz = handler.getClass();
		
		//IName指向的是动态生成的代理对象实例,此代理对象实现了你所要被代理对象的所有接口
		//这里生成的动态对象也同样实现了StudentImpl所实现的接口
		IStudentName IName = (IStudentName)Proxy.newProxyInstance

(clazz.getClassLoader(), student.getClass()
				.getInterfaces(), handler);
		IName.setName("zhangsan");
		System.out.println(IName.getClass());
		
		IStudentAge IAge = (IStudentAge)Proxy.newProxyInstance

(clazz.getClassLoader(), student.getClass()
				.getInterfaces(), handler);
		IAge.setAge(100);
		System.out.println(IAge.getClass());
		System.out.println(student.name + ", " + student.age);
	}

}

通过这种方式被代理对象可以在运行时动态改变,需要控制的接口也可以动态改变,这样使得程序的灵活性更大
分享到:
评论

相关推荐

    java动态代理机制分析及拓展

    Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。动态代理通常用于实现AOP(面向切面编程)、事件...

    java动态代理机制

    Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现特定接口,从而可以灵活地扩展或增强已有代码的功能。在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `...

    Java动态代理机制分析

    Java 动态代理机制是Java反射机制的一部分,它允许开发者在运行时动态创建代理类和对象,以便在方法调用时插入自定义的行为。这种机制主要用于实现AOP(面向切面编程)和拦截器模式,提供了对方法调用的额外控制和...

    Java中的动态代理

    #### 三、动态代理示例分析 下面通过一个简单的例子来理解Java动态代理的工作原理: ```java // 定义接口 public interface HelloWorld { void sayHelloWorld(); } // 实现接口 public class HelloWorldImpl ...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...

    基于Java动态代理和反射机制实现ORM

    在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...

    java动态代理详细解析

    Java动态代理是一种编程技术,主要用于在运行时创建一个新的对象,该对象可以作为现有接口的实现。动态代理的主要目的是为了在不修改原有代码的基础上,为已有的接口或类添加额外的功能,比如日志、事务管理、性能...

    java代理机制 JDK动态代理和cglib代理 详解

    本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口实现,它要求被代理的类必须实现至少一个接口。在运行时,Java会动态地创建一个新的类,这个类实现了与原始...

    java动态代理

    通过以上分析,我们可以看到Java动态代理是如何工作的。在实际开发中,动态代理可以用来实现很多强大的功能,如AOP中的前置通知、后置通知等。理解动态代理的工作原理对于提高代码的可维护性和扩展性非常重要。

    关于jdk动态代理的源码剖析

    在Java开发过程中,动态代理技术是一项非常实用的技术,它可以帮助我们实现在不修改原有代码的基础上为方法增加额外的功能,比如日志记录、权限校验等。本文将深入分析JDK动态代理的工作原理及其内部实现机制。 ###...

    java动态代理类的实例

    Java动态代理是Java语言提供的一种高级特性,它允许我们在运行时创建一个代理对象来代替某个接口或类的对象,这个代理对象能够对...分析和理解这个文件的内容,可以帮助我们深入理解Java动态代理的更多细节和应用场景。

    java动态代理机制综合分析以及实现

    ### Java动态代理机制综合分析以及实现 #### 引言 Java动态代理机制为开发者提供了无需手动编写代理类的便利方式,只需指定一组接口及委托类对象即可动态获得代理类。这种代理类能够自动将所有方法调用分派到委托...

    java Proxy 动态代理

    Java的动态代理是一种强大的设计模式,它允许在运行时创建具有特定行为的代理对象,这些对象可以代替原对象执行某些任务。动态代理机制是Java语言提供的一种反射特性,主要用于实现AOP(面向切面编程)或者对现有...

    Java 动态代理Proxy应用和底层源码分析.pdf

    ### Java 动态代理Proxy应用和底层源码分析 #### 一、Java动态代理简介 Java动态代理是一种在运行时动态生成代理类的技术,通过该技术可以为一个或多个接口生成一个实现类,该实现类可以拦截接口方法的调用,并...

    Java动态代理机制综合分析及

    Java 动态代理机制是Java语言提供的一种在运行时创建代理类和代理对象的机制,主要涉及`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。这一机制使得开发者无需手动编写代理类代码,只需...

    用Java实现的代理模式之动态代理

    在Java中,代理模式有静态代理和动态代理两种实现方式。本篇将重点讨论"动态代理",这是一种在运行时创建代理对象的技术,使得我们可以在程序运行过程中,根据需要动态地生成具有额外功能的代理类。 动态代理主要由...

Global site tag (gtag.js) - Google Analytics