java内省Introspector
大纲:
- JavaBean 规范
- 内省
一、JavaBean 规范
JavaBean —般需遵循以下规范。
- 实现 java.io.Serializable 接口。
- javaBean属性是具有getter/setter方法的private成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性。
- JavaBean 必须有一个空的构造函数
- JavaBean 必须有一个public构造函数
二、内省
- 首先内省的本质也是利用反射
- 通过内省可以快速拿到javaBean变量的getter与setter,从而快速操作bean对象。
测试用javaBean
public class Person {
private String name ;
private int age ;
public void say(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1.可以通过BeanInfo对象拿到JavaBean类中所有属性和方法的描述器
public static void main(String[] args) throws Exception {
//获取BeanInfo对象,主要用于获取javaBean的属性描述器
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
//方法描述器
MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
//属性描述器
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
//测试对象
Person person = new Person();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
//属性名
System.out.println("Person的属性:"+propertyDescriptor.getName());
if("name".equals(propertyDescriptor.getName())){
//属性读方法
Method readMethod = propertyDescriptor.getReadMethod();
//属性的写方法
Method writeMethod = propertyDescriptor.getWriteMethod();
writeMethod.invoke(person,"xiaoming");
System.out.println("person的name:"+readMethod.invoke(person));
Class<?> propertyType = propertyDescriptor.getPropertyType();
System.out.println("属性的类型:"+propertyType.getName());
}
}
}
2.直接获取某个属性的描述器
public static void main(String[] args) throws Exception {
Person p = new Person();
//直接通过名称获取属性描述器
//获取name属性的描述器,方便我们直接操作p对象的name属性。
PropertyDescriptor descriptor = new PropertyDescriptor("name", Person.class);
Method writeMethod = descriptor.getWriteMethod();
writeMethod.invoke(p,"nananan");
System.out.println("person对象name:"+descriptor.getReadMethod().invoke(p));
}
java内省Introspector的更多相关文章
- Java 内省(Introspector)深入理解
Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...
- Java 内省(Introspector)和 BeanUtils
人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...
- JAVA内省(Introspector)
什么是Java内省:内省是Java语言对Bean类属性.事件的一种缺省处理方法. Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作,显得很麻烦:所以sun公 ...
- 聊聊Java内省Introspector
前提 这篇文章主要分析一下Introspector(内省,应该读xing第三声,没有找到很好的翻译,下文暂且这样称呼)的用法.Introspector是一个专门处理JavaBean的工具类,用来获取J ...
- Java 内省 Introspector
操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 pub ...
- 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的
#### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...
- 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor
#### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...
- 深入理解Java:内省(Introspector)
深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...
- Java:内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...
随机推荐
- 小白的第一篇python博客
学习python课程三天,先了解了计算机的历史及各种发展史,python的历史及部分语法,python主要学习内容有"hello world",int常量.str字符串,print ...
- vue 学习八 自定义指令
vue指令注册有两种方式 1 全局注册 在main.js中 使用vue.directive Vue.directive('alert_w', { inserted(el,bin,vn) { conso ...
- MyBatis 通过包含的jdbcType类型
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED TINYINT REAL V ...
- The 'with' and 'as' Keywords
Programming is all about getting the computer to do the work. Is there a way to get Python to automa ...
- Web前端/全栈核心(html5/css3/js/vue/react/angular/es6/node)观看笔记
a标签中的超链接,需要加 http:// 否则会出现页面找不到. iframe中添加a标签,a标签中的target属性可以控制即将打开的页面,在那个位置显示. _blank 在新窗口中打开被 ...
- java-items
类名Items package entity; //商品类 public class Items { private int id; // 商品编号 private String name; // 商 ...
- php编译安装phalcon框架 - centos
使用官方的文档安装方式会报错,进行了一些实验,终于安装成功! 安装phalcon前提是需要安装php的pdo,如果使用mysql 需要安装 pdo_mysql 先看下git的版本号git --vers ...
- 天照(amaterasu)
天照(amaterasu) 有些时候,出题人真的不想写背景. 总而言之,天照现在有一个长度为 $ N $ 序列,她有 $ M $ 次询问,对于第 $ i $ 次询问 $ l_i,r_i,x_i $ 你 ...
- 一:unittest框架配合selenium工具之CSS_selector定位。
做了自动化测试这么久了,一直没有梳理到元素定位这一块的内容,其重要性不言而喻.趁着周末有时间,梳理一下. 1,通过id定位 driver.find_element_by_css_selector(&q ...
- linux R环境安装以及注意事项
安装Ryum install Ryum install readline-develyum install libXt-devel 1.安装后在R命令行启动Rserve,在脚本中不要重复加载Rserv ...