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反射的主要内容,如果未能解决你的问题,请参考以下文章