内省(introspector)------>JavaBean
内省(introspector)------>JavaBean
1、问什么要学内省?
开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN
公司开发了一套API,专门操作Java对象的属性
2、什么是JavaBean和属性的读写方法?
3、通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式
贱人 小婊砸 矫情 &、通过introspector类获取Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor)
通过这个属性器,就可以获取某个属性对应getter和setter方法,然后通过反射机制来调用这些方法
&、通过PropertyDescriptor类操作Bean的属性
-------------------------------------------------
private String name="mumu";//字段
private int age;//字段
private Date birthdy;
public String getName(){//属性指的是设置获取setter和读写getter的字段的方法
return name;
}
public Date getBirthdy() {
return birthdy;
}
public void setBirthdy(Date birthdy) {
this.birthdy = birthdy;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAbc(){//属性:属性的名称是abc
return "abc";
}
-------------------------------------------------
一、内省:操作属性的(类中的getter和setter方法)
得到student类属,封装到BeanInfo中
BeanInfo bean = Introspector.getBeanInfo(Student.class);
得到类中的所有属性描述器
PropertyDescriptor[] pd = bean.getPropertyDescriptors();
system.out.println(pd.length);//打印出来Student类中属性的长度
for(PropertyDescriptor p:pd){//属性:属性的名称是abc
system.out.println(p.getName());//打印出属性name的值
}
二、// PropertyDescriptor(String propertyName, Class<?> beanClass)
// 通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。
//创建student对象
Student s = new Student();
//得到类中的属性描述器
PropertyDescriptor p = new PropertyDescriptor("name",Student.class);//name为属性的名称,Student.class为student的字节码
Method m = p.getReadMethod();//得到getName()的方法
//得到的是string类型的值
String str = (String)m.invoke(s,null);//s:为那个对象的;null:表示传入的值,次返回的是Object的值,请转换成String类型的值
sysotem.out.println(str);
//设置属性的值
Method me = p.getWriteMethod();//得到setName()的值
me.invoke(s,"xiaomumu");
system.out.println(s.getName());
三、//利用BeanUtils框架来操作属性
//创建student对象
Student s= new Student();
//调用getName()方法
String str = BeanUtils.getProperty(s,"name");//s:表示为那个对象的,"name":表示为对象中名称为“name”属性的方法
sysotem.out.pritnln(str);
//设置name属性的值
BeansUtils.setProperty(s,"name",value);s:表示为那个对象的,"name":表示为对象中名称为“name”属性的方法,value:表示所输入的值
system.out.println(s.getName());//打印修改后:属性名称为name的值
四、//BeanUtils可以进行类型的自动装换,但仅限于基本类型之间,如:需要int类型的,输入String类型的也可以
//创建student对象
Student s = new Student();
String str = BeanUtils.getProperty(s,"age");//得到getAge()方法
system.out.println(str);
//设置age属性的值
BeanUtils.setProperty(s,"age","12");//设置age字段的值为字符串,beanUtils可以进行自动的转换
system.out.println(s.getAge());
五、//对于非基本类型的设置
//用户输入的都是字符类型
//String <---------->和其他类型之间的互相装换
//用户看到的都是string类型的
Student s = new Student();
//给BeanUtils注册类型装换器
//new DateLocaleConverter():转化成本地类型
ConvertUtils.register(new converter(){//匿名内部类实现内部类 register:注册类型转换器,给什么类型,转换成想要得到的类型
//type:目标类型,也就是想要转换成的类型
//value:当前传入的值
public Object convert(Class type, Objcet value){}
// if(value.equals(Date.class)){
// //字符串转换成Date类型
// }else{
// //Date转换成字符串类型
// }
DateFormat df = new simpleDateFormat("yyyy-MM-dd");
//传入String的值
if(value instanceof String){//instanceof:实类化对象
//字符串数据类型转换成Date数据类型
String str = (String)value;
try{
Date dt = df.prase();//把字符串类型的数据解析成Date类型
return dt;
}cache(Exception e){
throw new RuntimeException(e);
}
}else{
//Date数据类型转换成String类型
Date d = (Date)value;
String str=df.format(d);
return s;
}
BeanUtils.setProperty(s,"birthdy","3002-03-03");
system.out.println(s.getBirthdy());
},Date.class);
六、//利用BeanUtils封装数据
Map map = new HashMap();
map.put("name","xiaomumu");
map.put("age",18);
map.put("birthdy","2001-01-01");
Person p = new Person();
//封装数据前
System.out.println("封装数据前:"+p);
CovertUtils.register(new DateLocaleConverter(),Date.class);
BeanUtils.populate(p,map);
System.out.println("封装数据后:"+p);
内省(introspector)------>JavaBean的更多相关文章
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...
- 内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...
- 深入理解Java:内省(Introspector)
深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...
- Java:内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...
- JavaBeans与内省(Introspector)
JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大. 现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...
- Java 内省(Introspector)深入理解
Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...
- 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor
#### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...
- Java 内省(Introspector)和 BeanUtils
人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...
- (转载)深入理解Java:内省(Introspector)
本文转载自:https://www.cnblogs.com/peida/archive/2013/06/03/3090842.html 一些概念: 内省(Introspector) 是Java 语言对 ...
随机推荐
- 黑马程序员——C语言基础 流程控制 选择结构和循环结构
---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...
- 第3.2 使用案例1:股票期货stock portfolio 21050917
As mentioned earlier in the chapter, the first use case revolves around a stock portfolio use case ...
- window上利用pip安装pandas
官网推荐的是直接使用Anoconda,它集成了pandas,可以直接使用.安装挺简单的,有windows下的安装包.如果不想安装庞大的Anoconda,那就一步一步用pip来安装pandas.下面我主 ...
- 推荐几款实用的Android Studio 插件
推荐几款实用的Android Studio 插件 泡在网上的日子 发表于 2015-10-09 10:47 第 17453 次阅读 插件,Android Studio 10 编辑推荐:稀土掘金,这是一 ...
- android assets文件夹浅谈
---恢复内容开始--- 最近在研究assets文件夹的一些属性跟使用方法.根据网上一些文章.实例做一下汇总,拿出来跟大家分享下,有不足的地方还请多多指教. 首先了解一下assets是干什么用的,as ...
- Celery 框架学习笔记
在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...
- 到入百度LSS framework Reason: image not found
dyld: Library not loaded: @rpath/VideoCore.framework/VideoCore Referenced from: /var/containers/Bund ...
- PHPstorm--ThinkStorm安装
原文地址 http://www.thinkphp.cn/topic/34518.html QQ群: 320655679: 因为公司在使用Ide,来帮助开发,PHPstorm最近很流行,因为他有很多插 ...
- NSOperation的几种使用方式
1.NSInvocationOperation 创建NSInvocationOperation对象 - (id)initWithTarget:(id)target selector:(SEL)sel ...
- 使用spring @Scheduled注解执行定时任务、
http://blog.csdn.net/sd4000784/article/details/7745947,留下来备用.