Java web-内省(Introspector)
来源:互联网 发布:佳能9100cdn网络驱动 编辑:程序博客网 时间:2024/05/29 00:34
这个反射类是在网易云课堂上30天轻松掌握JavaWeb里面学习的。可以写框架用。但是为什么还要学呢?当然是为了用喽。
内省是sun公司开发的一套API,专门用于操作java对象的属性,虽然反射技术也可以,但是反射技术过于麻烦。
- 内省访问JavaBean属性的两种方式:
1:通过PrepertyDescriptor类操作Bean的属性
2:通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo来获取属性描述器(PropertyDescriptor),通过这个属性描述器就可以获得某个属性相应的getter/setter方法,在通过反射机制来调用这些方法 - 什么是JavaBean
package com.test.introspector;public class Person { //JavaBean private String name; private String password; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getAB() { return ab; } public void setAB(int age) { this.ab = ab; }}
如上面的Person类便是一个JavaBean,在java web中,用户会提交许多数据,比如账户名,密码等,而我们要创建一个对象去接收用户的数据,创建的这个对象就是一个javaBean.
javabean的属性取决于javabean中的getter/setter方法,而不是其定义的变量。
如上面代码,其中并没有定义ab变量,但是有getAB和setAB方法,则我们说这个javaBean中有ab属性。
注意:上面的Person类一共有5个属性(name, password, age, ab, class),class属性是继承其父类Object中的属性。也就是我们创建的每一个javaBean中都会有一个class属性。
- 写内省类的一般步骤:
用Introspector类中的getBeanInfo得到BeanInfo对象 -> 利用BeanInfo对象中的的getPropertDesriptors()得到PropertDescriptors(属性描述器)对象 ->
利用PropertDescriptor对象中的setReadMethod、setWriteMethod(JavaBean中的getter/setter方法)对JavaBean中的属性进行操作。
package com.test.introspector;import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import org.junit.Test;//使用内省api操作bean的属性public class Dome1 { @Test public void test1() throws Exception { BeanInfo info = Introspector.getBeanInfo(Person.class); //得到bean的所有属性,包括继承属性// BeanInfo info = Introspector.getBeanInfo(Person.class, Object.class);//得到bean自己的属性,不包括继承Object继承的属性 PropertyDescriptor[] pds = info.getPropertyDescriptors(); //创建PropertyDescriptor数组 for (PropertyDescriptor pd : pds) { System.out.println(pd.getName()); //输出JavaBean所有的属性。 } } //操纵bean的指定属性:age @Test public void test2() throws Exception { Person p = new Person(); //只是为了省事,应该用reflect出Preson对象 PropertyDescriptor pd = new PropertyDescriptor("age", Person.class); //得到属性的写方法,为属性赋值 Method method = pd.getWriteMethod(); //等同public void setAge(int age) method.invoke(p, 666); //获取属性的值// System.out.println(p.getAge()); //一般方法 method = pd.getReadMethod(); System.out.println(method.invoke(p)); //age的get方法无参数,所以只传一个Person对象 } //获取当前操作属性的类型 @Test public void test3() throws Exception { PropertyDescriptor pd = new PropertyDescriptor("age", Person.class); System.out.println(pd.getPropertyType()); //getPropertyType返回的是class类型 }}
阅读全文
0 0
- Java web-内省(Introspector)
- Java Introspector(内省)
- java内省(Introspector)简介
- Java的内省(introspector)
- java中的内省(Introspector)
- java内省(Introspector)简介及实例
- Java基础加强之内省(introspector)
- Java基础加强之内省(introspector)
- Java学习笔记-JavaBean-内省(Introspector)
- Java的内省(Introspector)操作
- Java--introspector(内省)操作bean属性
- Java 内省技术(Introspector)
- JAVA内省 Introspector
- java (内省)Introspector
- Java内省IntroSpector应用
- JAVA内省(Introspector)
- Java内省IntroSpector应用
- Java内省IntroSpector应用
- Fisher常用网址
- 整理ajax各种请求方式
- Qt 判断网络连接
- 数据分析:Python分析学生数据
- 分享《架构真经:互联网技术架构的设计原则(原书第2版)》序言中的一段话
- Java web-内省(Introspector)
- geode(二)配置
- 1134. Vertex Cover (25)
- 【Ubuntu】安装依赖文件
- SharedPrefence的一个简单工具类
- 文章标题
- Mybatis动态SQL trim
- Eclipse中新建java类自动生成作者和时间设置
- Fraction(辗转相除求最大公约数)(CodeForcesOJ)