zoukankan      html  css  js  c++  java
  • java 深入技术八(内省)

    1. javabean的软件设计思想

    2.内省:封装了java反射,提供直接操作属性的Setter和getter方法的方法

    3.核心API:BeanInfo java 的描述信息,Introspector 内省的变成入口,PropertyDescriptor  属性的描述器 

    1. javaBean 简介

    内省(Insrospector)

    javabean 是一中java类的设计思想,对普通java类的设计提供了一些约定,比如,所有的字段都应该是private私有的,应该为所有的字段提供setter和getter方法来操作这些字段,至少有一个无参构造函数(创建对象的newInstance),不可以直接访问一个类的私有字段,要访问,使用setter和getter

    //符合javaBean设计思想的普通java类

    public class Student{

      private String id; //id字段是私有的

    private String name ;//name字段是私有的

    public Student(){} //提供一个无参数构造函数

    public String getId(){} //获得id字段的值

    public void setId(String id){} // 设置id字段的值

    public String getName(){} //获得name字段的值

    public void setName(String name){} //设置name 字段的值

    }

    2)如何使用数据封装Student对象

    存储了数据的Map对象,把这个Map对象中的数据封装成Student对象

    Map<String ,Object > map=new HashMap<String ,Object >();

    map.put("id","10000000");

    map.put("name","建国");

    map.put("age",30);

    三种方式:直接调用Student对象的响应的setter方法

                  使用反射技术

                  使用内省技术

    2.使用反射技术封装对象

    3.内省API以及使用内省封装对象

    java 内省封装了java反射

    1. Java 内省依赖javabean设计思想和java反射,内省要求java类符合javabean的设计思想

    2.java内省使用java反射解析java类的结构,把字段和该字段对象的setter和getter方法关联起来,封装到PropertyDescriptor对象中,称为属性描述器,通过属性描述器可以直接获得该字段的setter和getter方法的Method对象

    3. 使用内省的编程步骤

    //获得beanInfo信息,Introspector,propertyDescriptors

    BeanInfo beaninfo=Introspector.getBeanInfo(obj.getClass());

    PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();

    for(PropertyDescriptor  propertyDescriptor: propertyDescriptors ){

    String fileName=propertyDescriptor.getName();

    //获得Method对象之后,就可以按照反射的做法调用方法了

    Method setMethod=propertyDescriptor.getWriteMethod();

    setMethod.invoke(obj,value);

    }

    BeanInfo

    BeanInfo 是一个符合JavaBean规范的Java类的描述信息,可以通过BeanInfo对象获得所有字段的描述其PropertyDescriptor(包含字段信息和该字段的setter和getter方法)

    核心方法: PropertyDescriptor[] getPropertyDescriptors()

    BeanInfo的对象通过

    BeanInfo beanInfo =Introspector.getBeanInfo(clazz) ;方法获得

    Introspector

    Introspector 内省,能够解析java类生成该类的BeanInfo信息的对象

    Introspector 类是java内省的编程入口,一般都是通过Introspector类解析一个Class对象生成一个BeanInfo对象

    BeanInfo beanInfo=Introspector.getBeanInfo(obj.getClass());

    getBeanInfo 内部是通过java反射技术来解析一个类

    Introspector只是提供了一个解析类的功能,并没有其他东西

    PropertyDescriptor

    属性描述器包含一个字段的名称,类型,包括此字段的setter和getter方法

    核心方法:

    Class<?> getPropertyType() //获得字段的类型

    Method getReadMethod() //获得字段的读方法(getter)

    Method getWritterMethod() //获得字段的写方法(setter)

    String getName() //获得字段的名字

    java反射和java内省

    java反射机制就是通过解析类的内部结构,获得这个类的所有属性和方法,并且可以操作这些属性和调用这些方法

    反射技术除了可以使我们开发通用的功能外,还可以让程序在运行时加载并使用最开始不存在的新类

    java内省专门用给javabean 服务的,方便把数据封装到对象中

     反射和内省的特点

    4.动手写ORM

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/shiyeyeyeye/p/5082148.html
Copyright © 2011-2022 走看看