当前位置:首页 > JAVA > 自己动手封装javaBean

自己动手封装javaBean

再公司开发框架时,经常需要使用java对象(javaBean)的属性来封装程序的数据,封装javaBean的方法有很多,比如反射,内省,以及使用工具类。废话不多说,第一步,从反射开始。

java

javaBean介绍:

简介:

JavaBean是使用Java语言开发的一个可重用的组件,在开发中可以使用JavaBean减少重复代码,使整个代码的开发更简洁。

编写要求:

javaBean本身是一个类,设计该类的时候要遵循一下方法:

1
2
3
4
5
6
7
1.如果成员变量的名字是xxx,则相应地有两个用来得到成员变量值和设置变量值的方法,它们分别是getXxx()和setXxx()且是public的:
 public datatype getXxx();
 public void setXxx(datatype data);
 
(2)如果成员变量是boolean型数据,使用is代替get方法;:
   public boolean isXxx();3)需要一个无参数的构造函数。

一个javaBean的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//javaBean
public class Person {
        private int id;
    private String name;
    public Person(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    //无参数构造函数
    public Person(){}
    //获得Id属性
    public int getId() {
        return id;
    }
    //设置
    public void setId(int id) {
        this.id = id;
    }
    //get方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //tostring不在要求之中;
    @Override
    public String toString() {
 
        return "id:"+ this.id+" name:"+ this.name;
    }
 
}

程序员

使用反射封装JavaBean:

通过反射更改对象域来封装JavaBean,通过getDeclaredField方法获得对应的域,并调用set方法进行修改。
下面的方法通过配置文件更改JavaBean的属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
配置文件内容如下:obj.txt
com.rlovep.bean.Person
id=22
name=peace
代码与注释:
public class CofigRef {
    public static void main(String[] args) {
        try {
            //获得更改后的对象;
            Person p=(Person)getInstance();
            System.out.println(p);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //根据配置文件的内容生产对象的对象并且要把对象的属性值封装到对象中。
        public static Object getInstance() throws Exception{
            //通过字符流进行输入;
            BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt"));
            String className =  bufferedReader.readLine(); //读取配置文件获取到完整的类名。
            Class clazz = Class.forName(className);
            //通过class对象获取到无参的构造方法
            Constructor constructor = clazz.getConstructor(null);
            //创建对象
            Object o  = constructor.newInstance(null);
            //读取属性值
            String line = null;
            while((line = bufferedReader.readLine())!=null){
                String[] datas = line.split("=");
                //通过属性名获取到对应的Field对象。
                Field field =   clazz.getDeclaredField(datas[0]);
                field.setAccessible(true);
                if(field.getType()==int.class){
                    //更改属性内容;
                    field.set(o, Integer.parseInt(datas[1]));
                }else{
                    field.set(o, datas[1]);
                }
 
            }
            bufferedReader.close();
            return o;
 
        }

此去用反射进行更改,直接更改实现域的值;比较麻烦。需要各种判断和操作,不适合用于开发。

通过内省封装JavaBean

内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。Java JDK中提供了一套 API 用来访问某个属性的 getter/setter 方法,这就是内省。
1. PropertyDescriptor类:
属性描述器类,利用该类可以获得对应属性的get和set方法。
getReadMethod(),获得用于读取属性值的方法;getWriteMethod(),获得用于写入属性值的方法;
演示如下:

1
2
3
4
5
6
7
8
9
//属性描述器
        PropertyDescriptor descriptor = new PropertyDescriptor("id", Person.class);
        //获取属性对应的get或者是set方法设置或者获取属性了。
        Method  m = descriptor.getWriteMethod();  //获取属性的set方法。
        //执行该方法设置属性值
        m.invoke(p,110);
         //获得get方法;
        Method readMethod = descriptor.getReadMethod(); //是获取属性的get方法
        System.out.println(readMethod.invoke(p, null));

Introspector类:
通过调用Introspector.getBeanInfo(People.class)方法可以获得BeanInfo对象,改对象封装了people类的所有属性。
而BeanInfo中有方法 getPropertyDescriptors(),获得属性的描述PropertyDescriptor[],可以通过遍历返回结果可以操作JavaBean。演示如下:

1
2
3
4
5
6
7
8
//Introspector 内省类
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
        //通过BeanInfo获取所有的属性描述
        PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors(); //获取一个类中的所有属性描述器
        for(PropertyDescriptor p : descriptors){
            //获得所有get方法
            System.out.println(p.getReadMethod()); //get方法
        }

通过这两个类的比较可以看出,都是需要获得PropertyDescriptor,只是方式不一样:前者通过创建对象直接获得,后者需要遍历,所以使用PropertyDescriptor类更加方便。
内省封装比反射相对来说简单点,但是实质上是反射的一种变体。

Dbutils数据库JDBC专用工具也可以封装JavaBean:

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
下载链接:链接
此去只是简要介绍,后面jdbc教程中在做完整介绍使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Test
    /**
     * 
    * @Title: testQueryOne 
    * @Description: 使用组件提供的结果集对象封装数据。 
    * @return:void   
    * @throws 
    * @author peace w_peace@163.com
     */
    public void testQueryOne(){
        String sql="select * from admin where id=?";
        //获取连接
        connection=JdbcUtil.getConnection();
        //创建Dbutils核心工具类
        QueryRunner qr=new QueryRunner();
        //查询返回单个对象
        try {
            //使用beanhandle进行封装
            //参数依次为:连接,sql语句,结果处理器,位置参数
            //查下你结果封装到Admin
            Admin admin=qr.query(connection,sql, new BeanHandler<Admin>(Admin.class), 4);
            System.out.println(admin);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
          try {
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
    }

代码总结

一些常见的封装javabean的方法就写在这里了,还有什么不懂得地方请给我留言。

  • << 深入理解Csharp迭代器
  • iOS应用开发之登录注册 >>
  • 作者:
    除非注明,本文原创:知道91,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.zhidao91.com/myself-javabean/

    相关文章 近期热评 最新文章

    • Android内存优化:ArrayMap
      其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。
    • 安卓开发-实现软键盘搜索
      安卓是现在最火的平台了,在实际开发中,调用系统的键盘是很容易,但是有些情况下,我们需要做出软键盘,这样用户的安全度会提高一个档次。
    • Java Hibernate入门
      Hibernate是一个面向JAVA环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去 ,Hibernate的目标主要是为了释放开发者通常的...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • ABP开发指南系列教程(2) – 多层架构...
      为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层: 展现层(...
    • ABP开发指南系列教程(1) – 入...
      ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WE...
    • Windows下 JIRA + Agile + Mysql 破解...
      本文讲述了Windows下 JIRA + Agile + Mysql 破解安装示例教程
    • c#类的构造函数继承关系示例剖析
      本文通过示例代码讲解了c#子类的构造函数与父类的关系,子类怎样集成父类的构造函数的。