内省机制(操作javaBean的信息)

简介: 内省机制(操作javaBean的信息)

内省机制(操作javaBean的信息)

----是不是联想到了反射机制了哈,这两者有什么区别呢?


1、内省机制和反射机制的联系

■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类的信息,而内省机制是sun公司针对特殊的类---javaBean推出的技术。内省机制就是用来获取javabean的信息的。


2、什么是javaBean?

■ 比较官方的描述:javaBean 是一种java 语言写成的可重用的组件(类)。

■ 简单理解:就是一种特殊类,遵循特定的规范,遵循的规范如下:

  • 必须使用 public 修饰(javabean)类
  • (javabean)类必须有公共无参构造器
  • 包含有属性的操作手段(获取属性值或给属性赋值---getter/setter)

■ javaBean 可以很复杂,也可以很简单。

  • javabean 可以有的信息(不是必备):方法Method、事件event、属性property
  • 补充一下属性property:表示状态,不是字段,是字段的操作方法getter、setter方法决定的,判断属性看getter/setter

□ 复杂的javabean拥有了事件、属性、方法,例如UI(button、panel、window类);

□ 简单的javabean,最简单最常用的有实体类domain-包含了属性和操作属性的getter、setter方法,还有dao、service组件,封装数据,操作数据库,逻辑运算等。


3、内省机制(自省机制)的作用:就是用来查看和操作javaBean的信息(属性、方法、事件)

--------一般常用来操作简单的javaBean(domain类)的属性。

(1)获取属性名或属性类型

(2)设置属性值或获取属性值-通过反射调用setter或getter方法(setter/getter)


4、内省机制的核心类---Introspector

  • 注意核心类在哪个包,例如反射-Class在lang包里,内省的Introspector在beans包里
  • 抓住核心类Introspector(学习的突破口),顺腾摸瓜,例如反射抓住核心类Class,然后顺藤摸瓜,获得构造器Constructor、方法Method;
  • 我们知道javaBean可以具有属性、事件、方法,而操作javabean的内省机制,它的核心类Introspector就是操作javaBean的属性、事件、方法。


5、Introspector(核心类、学习内省机制的突破口、学习操作javaBean的学习入口)---操作javaBean

  • 第一步就是先得到该javaBean:【在突破口中:得到javaBean的描述对象BeanInfo对象
  • 方法getBeanInfo的参数是该javaBean的字节码,结果是得到javaBean的信息---BeanInfo对象(javaBean的描述对象)


78.png

第二个突破口拥有javaBean的一切的BeanInfo:【在突破口中:得到javaBean的属性描述器PropertyDescriptor
  • 方法getPropertyDescriptors(),结果是得到javaBean的属性信息---PropertyDescriptor属性数组对象(javaBean的属性描述器对象)


image.png


第三个突破口拥有javaBean的属性的一切的PropertyDescriptor:【在突破口中:得到关于属性的操作
  • 属性描述器是数组----遍历


80.png


6、内省机制操作javaBean的属性代码如下:

@Test
  public void testIntrospector() throws Exception {
    //1、通过突破口(核心类Introspector)获取javaBean描述对象BeanInfo
    BeanInfo beanInfo = Introspector.getBeanInfo(Person.class,Object.class);
    //2、获取javaBean中的属性描述器
    PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
    //创建一个Person对象
    Person person = new Person();
    for (PropertyDescriptor pd : pds) {//遍历数组描述器数组
      //3-1、获取当前的属性的属性名
      System.out.println("当前属性的属性名是:" +pd.getName());
      System.out.println("当前属性的getter方法是:" +pd.getReadMethod());
      System.out.println("当前属性的setter方法是:" +pd.getWriteMethod());
      if("name".equals(pd.getName())) {//若当前属性名是name【不能直接使用setName方法,因为反射的时候并不知道是哪个具体的方法】
        Method setter = pd.getWriteMethod();//3-2、获取setter方法
        setter.invoke(person, "shan");//设置当前person对象的name值为shan
      } 
    }
  }
目录
相关文章
|
Java
Java反射机制动态操作
Java反射机制动态操作
54 0
|
6月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
78 4
|
5月前
|
IDE Java 编译器
深入解析JAVA注解:元数据如何改变编程世界
【6月更文挑战第29天】Java注解,作为元数据机制,为代码增添上下文信息,改变编程方式。注解标记在类、方法等上,不直接影响执行,但为编译器等提供额外信息。分为元注解、编译时和运行时注解,用于元数据提供、代码简化、提高可读性及自动化。示例展示了定义`@Loggable`注解来标记日志记录方法。注解广泛应用于依赖注入、ORM、Web服务等,提升效率和灵活性,是现代Java开发的关键。未来其应用将更广泛。
82 3
|
存储 SQL Java
Java反射读取注解信息
Java反射读取注解信息
69 0
|
6月前
|
监控 安全 Java
Java反射:深入了解动态类操作
Java反射:深入了解动态类操作
123 0
|
前端开发 Java 程序员
struts2封装好的三种收参方式,零散、对象、集合。
struts2封装好的三种收参方式,零散、对象、集合。
99 0
struts2封装好的三种收参方式,零散、对象、集合。
|
Java API
Java反射(四)反射获取类的结构信息
介绍了Constructor Method Field Class的API
122 0
|
Java 开发者
反射获取类结构信息|学习笔记
快速学习反射获取类结构信息
129 0
反射获取类结构信息|学习笔记
|
Java Spring
@Transactional注解在类上还是接口上使用,哪种方式更好?
@Transactional注解在类上还是接口上使用,哪种方式更好?
939 0