`
464772913
  • 浏览: 25369 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java的反射与代理

 
阅读更多

反射:通过类名获取该类的所有成员方法、变量,或者实例化对象等。

例:Class B 访问Class A 的retnum方法

 

package com.ysu.fams.webservices;

public class A {
    int count = 40;
  
    public int retnum(int i){
    	count = i;
    	return count;
    }
}

package com.ysu.fams.webservices;
import java.lang.reflect.Method;

public class B{

public static void main(String[] args) throws Exception{

	//获取A类对应的一个class对象
	Class cl = Class.forName("com.ysu.fams.webservices.A");
        //获取A类对应的一个实例化对象
	Object object = cl.newInstance();
	//获取A类对应的retnum方法对应的一个对象实例
        Method method = cl.getMethod("retnum", int.class);
        //调用A类方法获取结果
        Object result = method.invoke(object, 2);
        System.out.println(result); //输出结果:2
}

}

 

 

代理:为其他对象提供一种代理以控制对这个对象的访问,通过代理类访问真实的对象。

public interface Hello{
	public String getHello(String str);
	public String test();
}

public class A implements Hello{

	public String getHello(String str) {
		// TODO Auto-generated method stub
		return str;
	}
	public String test(){
		return "test";
	}
}

public class B implements InvocationHandler{
private Object obj;

public B(Object obj){
	this.obj = obj;
}

public Object invoke(Object proxy, Method method, Object[] args)
		throws Throwable {
	// TODO Auto-generated method stub
	System.out.println("拦截方法:"+method.getName());
	return method.invoke(obj, args);
}

public static void main(String[] args) throws Exception{
	//真实对象(即被代理对象)
	Hello hello = new A();
	 //为真实对象制定一个调用处理器
	InvocationHandler h = new B(hello);
	 //获得真实对象(hello)的一个代理类 
	Object objHello = Proxy.newProxyInstance(hello.getClass().getClassLoader(),//真实对象的类加载器
			hello.getClass().getInterfaces(),//真实对象实现的所有接口
			h //真实对象的处理器
			);
	if(objHello instanceof Hello){
		Hello he = (Hello)objHello;
		String result = he.getHello("你好!");
		System.out.println(result);
	}else{
		System.out.println("objHello isn't a Hello");
	}
}
}

 

分享到:
评论

相关推荐

    JAVA反射与代理

    在"JAVA反射与代理"这个主题中,我们将深入探讨这两个核心概念。 首先,让我们了解反射的基本用法。当一个类的名称在运行时才被知道,反射可以帮助我们动态地创建对象。例如,我们可以使用`Class.forName()`方法...

    java反射与代理实现AOP

    ### Java反射与代理实现AOP #### 一、AOP概念及应用场景 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,主要用于处理横切关注点问题,比如日志记录、性能统计、安全控制、事务处理、...

    Java反射与动态代理

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`,它们分别代表类、...

    java反射与动态代理笔记

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...

    Java 反射-动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...

    JAVA的反射机制与动态代理

    Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    JAVA反射机制与动态代理.part04

    JAVA反射机制与动态代理.part04

    Java反射及动态代理

    详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。

    java 反射与动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口、...

    JAVA 反射机制与动态代理ppt

    总的来说,Java反射机制和动态代理是Java平台强大而灵活的特性,它们使得Java程序能够在运行时具有更高的灵活性和可扩展性。然而,使用反射也可能带来性能开销和安全风险,因此在实际应用中需要权衡利弊,合理使用。

    利用Java的反射与代理实现IOC模式

    在这个主题中,我们将深入探讨Java反射和动态代理如何帮助我们实现IOC。 首先,让我们理解Java反射。反射允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在IOC中,反射用于在...

    java反射机制和动态代理的原理

    java反射机制和动态代理的原理,熟悉反射机制和动态代理

    经典java反射和动态代理代码

    Java反射和动态代理是Java编程中的重要特性,它们允许程序在运行时检查和操作类、接口、对象等的内部结构,以及动态地创建代理对象来处理特定任务。在这篇文章中,我们将深入探讨这两个主题,结合"reflections"这个...

Global site tag (gtag.js) - Google Analytics