Java——Java反射

Posted 杨晨光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java——Java反射相关的知识,希望对你有一定的参考价值。

       学习SpringAOP,看了一些书和网上的课程,基本上都是从什么切点、切面、连接点等来论述AOP的应用,感觉一开始面对这些,不是怎么好理解。要想全面的理解AOP,笔者认为,从其底层的实现原理——动态代理和反射,来介绍,会更加清晰明确,也会更加简单一些。


废话不多说,直接先看一个反射的Demo


package com.spring.aop.reflect; 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; 

public class ReflectHello  

	public ReflectHello() 
	
	
	public void sayHello(String name)  
		System.err.println("hello " + name); 
	 
	
	public static void main(String []args)  
		try  
			//通过反射生成对象,相当于 ReflectHello refect = new ReflectHello(); 
			ReflectHello refect = (ReflectHello)Class.forName("com.spring.aop.reflect.ReflectHello").newInstance(); 
			//通过类获取方法,sayHello。 
			Method method = refect.getClass().getMethod("sayHello", String.class); 
			//相当于语句, refect.sayHello("张三") 
			method.invoke(refect, "张三");  
		catch (InstantiationException e)  
			e.printStackTrace(); 
		 
	 


       首先,我们通过Class.forName的形式加载了一个类的全限定名,那么JDK的类加载器就会对应的Package中去找它,用newInstance代表生成一个类的实例(如果方法有构造参数的需要另外写法)。这样便可以得到一个ReflectHello对象。然后我们通过类去获取sayHello方法,这里的getMethod方法中参数,第一个为方法名称,后面的是参数类型(可以是多个)。最后使用method.invoke方法反射,invoke方法参数,第一个是类对象,第二个是参数。这就相当于用对象调用了一次sayHello方法,只是这里使用的反射调用而已。


      Java反射,就是这样。

以上是关于Java——Java反射的主要内容,如果未能解决你的问题,请参考以下文章

Java反射机制清空字符串导致业务异常分析

Java反射基础笔记

Java基础之反射注解代理

第16篇-JAVA 类加载与反射

论述Java中的栈与堆

Java面试通关要点汇总集