【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反射,就是这样。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值