Java反射笔记

反射:

1.动态语言,具备反射机制

a.运行时,判断任意一个类的对象的所属类

b.构造任意一个类的对象实例

c.判断任意一个类的成员变量和方法

d.调用任意一个对象的成员变量和方法

e.生成动态代理

 

Java中核心的API

java.lang.Class/.reflect.Method/Filed/Constructor(代表类的构造方法)

 

Class获取方式:

1.通过类名.Class

2.通过对象实例.getClass()

3.Class.forName()

4.classLoder.loadClass();//不常用

 

反射:

1.得到Object

Object obj = new Person();

2.调用对象的getClass方法得到类的名称

Class clazz = obj.getClass();

反射调用:

m.invoke(obj,”文康宇”)

m.getAnnotation(Override.class)-->SpringMVC拿到注解的方法  注解将配置信息存放在其中

通过类的实例获得方法的实例

Method m = clazz.getMethod(“setName”,String.class);

Method getM = clazz.getMethod(“getName”)

System.out.println(getM);

 

/*也可以将Object强转为Person对象*/

 

类的加载过程:

1.类的加载:将类的class文件读取进内存,并创建一个java.lang.Class对象  过程由类加载器完成

2.类的连接:将类的二进制数据合并到jre

3.类的初始化:JVM对类进行初始化-->包含静态代码 对象等

 

ClassLoder(类加载器):

JVM定义了两种类的加载器:bootstrap(启动类加载器) user-defined classloader (用户自定义)

JVM在运行时产生3个类加载器的组成的层次结构:

bootstrap(C++编写的,负责java平台的核心类库加载)-->extension(扩展类加载器,用来加载jre/lib/ext目录下的jar包  扩展包)-->system(负责classpath目录下的jar包)

 

使用反射调用private

Method m = clazz.getDeclaredMethod(“setName”,String.calss)

m.setAccessible(true)//是否可以操作

AOP两种方式:Spring jdk(反射结合Proxycglib(修改字节码)

动态代理:程序员通过代理类来调用其他对象的方法,并且在程序运行时根据需要动态创建目标类的代理对象。

Proxy是所有动态代理类的父类。实现动态代理就离不开接口、业务实现类、代理对象。

1.需要一个代理类 2.通过反射机制调用对象的方法-->invoke方法

给你一个object实例、方法名字、参数列表-->用这些做事情

 

一个接口-->业务实现类实现接口-->代理对象ProxyHandler,必须实现InvocationHandler

@override

public Object invoke(Object proxy,Method method,Object[] args) {

method.invoke(proxy,args);

}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值