反射机制&内省机制

反射机制&内省机制

构造器对象获取的方法

1.Class.forName(类路径)

2.Person person = new Person(); person.getclass();

3.Person.class;

//        1. 字节码对象的获取:
        Class<?> person = Class.forName("_01_getclass.Person1");
        //第二种方法
//        Class<Person1> person1Class = Person1.class;
        //第三种方法
//        Person1 person1 = new Person1();
//        Class<? extends Person1> aClass = person1.getClass();
通过反射获取字节码对象的构造器

getConstructors()用来获取所有的公共构造器

getDeclaredConstructors()用来获取所有构造器,包括private

getConstructor()用来获取特定的构造器

getDeclaredConstructor()用来获取任何特定构造器,包括private,使用该方法时候需要暴力访问,setAccessible(true)

(在获取特定的类构造器时候一定要注意里面的数据类型要保持一致,还有暴力访问)

通过反射获取字节码对象中的真实方法

getMethods()可以获取对象中的所有公共方法,包括父类的方法

getDeclaredMethods()可以获取本类所有方法,不包括父类

getMethod()可以获取对象中的任何特定公共方法,包括父类的方法

Method sayHello = aClass.getMethod("sayHello", String.class);
sayHello.invoke(真实对象,方法里的参数);

getDeclaredMethod()可以获取本类任何特定方法,不包括父类

Method doWork = aClass.getDeclaredMethod("doWork", String.class);
doWork.invoke(EO,方法里的参数);

(在获取特定的方法时候一定要注意里面的名称,数据类型要保持一致,还有暴力访问)

通过反射,操作对象中的属性

通过反射来调⽤对象中的字段,必须先要获取到字段对应的字段对象。

第⼀: 获取字段对应的字段对象
第⼆: 通过字段对象,修改字段内容

获取所有字段
public Field[] getFields()
public Field[] getDeclaredFields()

//获取单个字段
 Field id = forName.getField("id");
 //获取单个字段包括私有的
 //Field id = forName.getDeclaredField("id");
 //获取私有字段需要暴力访问
 //id.setAccessible(true);
 Object o1 = forName.newInstance();  
 id.set(o1,100);//这地方注意要把真实对象放在外面,
 // 在里面写的话会造成第二次又出现一个新的,从而调用不到设置的值
// id.set(forName.newInstance(),100);
 Object o = id.get(o1);
// Object o = id.get(forName.newInstance());
 System.out.println("o = " + o);
javaBean规范
  1. 使⽤ public 修饰.
  2. 字段私有化.
  3. 提供 get/set ⽅法.
  4. 公共的⽆参数的构造器.(使⽤反射,使⽤字节码对象.newInstance去创建对象.)

什么是属性( property )呢?:
JavaBean 可以封装数据,就是将数据保存到⼀个 bean 对象的属性中的.属性不是字段,属性是通过 get/set ⽅法推导出来的.
规范的get⽅法/获取⽅法/读⽅法: public 修饰,⽆参数,有返回,get开头.
规范的set⽅法/设置⽅法/写⽅法: public 修饰,有参数,⽆返回,set开头.

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
LomBok
  1. 提⾼开发效率
  2. 使代码直观、简洁、明了、减少了⼤量冗余代码(⼀般可以节省60%-70%以上的代码)
    . 极⼤减少了后期维护成本
内省

先获取类的beanInfo信息

Introspector.getBeanInfo(xxx.calss,Object.class);

获取属性描述器信息返回一个数组

beanInfo.getPropertyDescriptors();

遍历数组,得到每个属性信息,获取属性名字跟类型,获取写入读取方法

getname() getWriteMetod这个对应bean里面的set方法getReadMethod这个对应bean的get方法 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值