zoukankan      html  css  js  c++  java
  • Java基础加强-读取配置文件和内省

    Java读取配置文件

    1.采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。

    String path = "/WEB-INF/jdbc_connection.properties"; //读取WEB-INF中的配置文件

    String realPath = getServletContext().getRealPath(path);//getServletContext()相当于http://localhost/demo05

    //所以后面的path只需要以应用demo/开头具体的部署目录路径即可,如上面的/web-in…

    /*优点*/:可以读取任意的配置文件包括xml和properties。

    /*缺点*/:不能在servlet外面应用读取配置信息。

    2.采用ResourceBundle类读取配置信息  /*获取指定配置文件中所以的数据*/

    /*优点是*/:可以以完全限定类名的方式加载资源后,直接的读取出来,且可以在非Web应用中读取资源文件

    /*缺点*/:只能加载类classes下面的资源文件且只能读取.properties文件

    3.采用ClassLoader方式进行读取配置信息  /*获取的是classes的根路径下的文件*/ 

    /*优点是*/:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息

      /*缺点*/:只能加载类classes下面的资源文件。
     
     

    4.Class.getResouceAsStream

    //Class.getResourceAsStream(String path)path 不以 ‘/’ 开头(相对路径)时默认是从此类所在的包下取资源,以 ‘/’ 开头则是从  ClassPath根下获取。其只是通过path构造一个 绝对路径,最终还是由ClassLoader获取资源。

    //Class.getClassLoader.getResourceAsStream(String path) : 默认则是从ClassPath根下获取,path不能以 ‘/’ 开头,最终是由 ClassLoader 获取资源

    //classpath 就是存放 class 文件的 地方 ,javase项目 classpath 就是bin目录,javaee项目 classpath 就是classes 目录

    Class.getResource                    /*file:/E:/MyEclipseCode/JavaSEReview/bin/com/javaSE/config/ */  

    Class.getClassLoader.getResource     /* file:/E:/MyEclipseCode/JavaSEReview/bin/ */

    这两个getResource()是使用当前ClassLoader加载资源(即资源在 Class path中),这样资源和class直接打在jar包中,避免文件路径问题.

    两者不同是Class的getResource()方法是 /*从当前.class 文件路径查找资源*/,ClassLoader则是从 /*jar包根目录查找*/.  

    简陋的理解是,  Class.getResource查找范围更深入,有包名 

          Class.getClassLoader.getResource没有包名 只到bin目录下


    内省(Java语言对JavaBean类属性、事件的一种缺省处理方法)

    内省可以看作一种特殊的反射,只能操作javabean类的反射

    简单方式实现内省

    PropertyDescriptor propDesc=new PropertyDescriptor(userName,UserInfo.class)

    1.创建  PropertyDescriptor 实例对象 需要的参数(操作哪个属性,操作哪个JavaBean),得到的就是一个属性对象

    2.得到该属性对应的get和set方法

    3.执行相应方法,传参赋值(set)或得到返回值(get)

    复杂方式实现内省(Introspector类)

    将JavaBean中的属性封装起来进行操作。在程序把一个类当做JavaBean来看,就是调用Introspector.getBeanInfo()方法

    得到的BeanInfo对象封装了把这个类当做JavaBean看的结果信息,即属性的信息

    getPropertyDescriptors(),获得所有属性的描述,遍历PropertyDescriptor[],如果某个PropertyDescriptor即属性的名字和我们需要操作的属性的name相同

    操作这个PropertyDescriptor 就可以了,参考简单内省

    使用BeanUtils工具包操作JavaBean

    1.BeanUtils.getProperty(bean,"age");       //操作哪个bean  得到哪个属性

    2.BeanUtils.setProperty(bean,"age","20"); //操作哪个bean 操作哪个属性  操作的值是多少

    注:/*因为在web应用中,通常是字符串传递数据,所以这里BeanUtils帮我们做,比如这里的age属性是int类型,set 和 get都帮我们转成String再得到 或 赋值*

    注:如果在一个Bean中有Date类型的属性  Date birthday = new Date();  而Date类有一个set/getTime方法,即birthday对象有一个time属性

    在BeanUtils中,可以这样操作time属性,BeanUtils.getProperty(bean,"birthday.time")

    3.Bean和Map的转化

    注: /*java7新特性

    Map map = {name:"xzk",age:18};

    BeanUtils.setProperty(map,"name","xuzekun");

         */

    4.PropertyUtils

    PropertyUtils 和 BeanUtils的区别 ;不会进行数据类型的转换,即age属性为int类型,BeanUtils.setProperty(bean,"age",20);,这里给的就是int

  • 相关阅读:
    python3第六天
    python3第五天
    python3第四天
    python3 第三天
    python3第二天
    python3(2)
    python3(1)
    网络通信 & 初识socket
    python中包的语法
    模块语法
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7354645.html
Copyright © 2011-2022 走看看