内省技术

1 javaBean是什么?

  • javabean是一种规范。其实就是一种实体类,需要满足以下的条件:

    • ①必须是public的
    • ②必须实现Serializable接口
    • ③字段必须私有化
    • ④必须提供setter和getter方法  
  • 示例:
package com;

import java.io.Serializable;
import java.util.Arrays;

/**
 * 2017/11/2
 * 说明:
 */
public class Student implements Serializable{
    private String name ;//字段
    private int age;//字段
    private int[] aa;

    public int[] getAa() {
        return aa;
    }

    public void setAa(int[] aa) {
        this.aa = aa;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", aa=" + Arrays.toString(aa) +
                ‘}‘;
    }
}
  • [注意]:被private修改过的不要属性,称为字段,属性是指如上面的代码所示,setName,将set去掉,然后将Name的N变为小写,虽然和字段相同,但是含义是完全不一样的。

2 内省

  • 内省是构建在java反射机制的基础之上的,换句话说,没有反射就没有内省。
  • 内省主要是用来操作javabean的,很多框架内部都用到了内省技术。

  • 从上面的图中,我们可以看出,javabean主要就是用来在各层之间传递数据的。为什么?因为我们将数据封装到javabean中的话,不需要写很多参数。如下所示:
public void add(Student stu){}
public void add(String name,int age);
  • 而内省技术,就可以将页面上的数据在传递给控制器之前封装到javabean中,这样,在控制器里我们可以直接操作数据,而不需要再进行其他的处理。

  • 示例:内省的示例代码
package com;

import java.io.Serializable;
import java.util.Arrays;

/**
 * 2017/11/2
 * 说明:
 */
public class Student implements Serializable{
    private String name ;//字段
    private int age;//字段
    private int[] aa;

    public int[] getAa() {
        return aa;
    }

    public void setAa(int[] aa) {
        this.aa = aa;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", aa=" + Arrays.toString(aa) +
                ‘}‘;
    }
}
package com;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 2017/11/2
 * 说明:内省技术来封装javaBean技术
 */
public class StudentTest {
    public static void main(String[] args) throws Exception{
        Student student = new Student();
        Map<String,Object> properties = new HashMap<>();
        properties.put("name","张三");
        properties.put("age",20);
        properties.put("aa",new int[]{1,2});

        populate(student,properties);
        System.out.println(student);
    }

    public static void populate(Object Obj,Map<String,Object> properties) throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(Obj.getClass());
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        for(PropertyDescriptor pd : pds){
            if(!pd.getName().equals("class")){
                String property = pd.getName();//获取每一个属性值
                Method method = pd.getWriteMethod();
                //遍历properties 的Map集合
                 for(Iterator<Map.Entry<String,Object>> iterator = properties.entrySet().iterator();iterator.hasNext();){
                    Map.Entry<String,Object>  entry = iterator.next();
                    String key = entry.getKey();
                    Object value = entry.getValue();
                    if(key.equals(property)){
                        method.invoke(Obj,value);
                    }
                 }
            }
        }
    }
}
  • 当然,你也可以使用apache的BeanUtils工具包,来将表单上的数据封装到javaBean中。
时间: 2024-10-21 03:18:26

内省技术的相关文章

JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,如果浏览器没有禁用cookie的话,当浏览器再次访问项目中的Servlet程序时会将JSESSIONID带着,这时JSESSIONID就像唯一的一把钥匙  开启服务器端对应的session空间,进而获取到sessi

jsp 以及javabean内省技术

l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服务器端技术.将数据保存在服务器端.Session没有大小和个数限制.Session基于Cookie回写了一个JSESSIONID. Cookie的分类: * 会话级别的Cookie:浏览器关闭了,Cookie就销毁了! * 持久化的Cookie: * cookie.setMaxAge(时间); --

JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,假设浏览器没有禁用cookie的话,当浏览器再次訪问项目中的Servlet程序时会将JSESSIONID带着.这时JSESSIONID就像唯一的一把钥匙  开启server端相应的session空

Java内省技术

-------<a href="http://www.itheima.com/"">android培训</a>.<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!---------- JavaBean类: 在Java中有一种特殊的类,它用于程序中两个模块的信息交换.它的特点是将成员变量私有化.用getter和setter方法获取设置其成员变量的

javabean的内省技术和BeanUtils的使用

一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 的getter: String getName() settter: void setName(String name) javabean例子: //快捷键是shift+alt+s public class User { private String name; private int age;

javabean以及内省技术详解(转)

一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 的getter: String getName() settter: void setName(String name) javabean例子: //快捷键是shift+alt+s public class User { private String name; private int age;

javabean以及内省技术详解【转】

一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 的getter: String getName() settter: void setName(String name) javabean例子: //快捷键是shift+alt+s public class User { private String name; private int age;

关于XML文档pull解析的新思考-内省的应用

今天,复习黑马第6天学习的pull解析XML文档,结合第10天讲的JavaBean,突然了有了新的思考. 以下是我创建的XML文档: <?xml version="1.0" encoding="UTF-8"?> <!-- 定义一个演示文档,存储黑马的所有班级,以及每个班级的信息 利用XML的功能之一:XML用来表示生活中有关系的数据  -->  <itheima>   <class>   <name>Anr

内省(introspector)------&gt;JavaBean

内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN        公司开发了一套API,专门操作Java对象的属性    2.什么是JavaBean和属性的读写方法?    3.通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式        贱人 小婊砸 矫情 &.通过introspector类获