Java高新技术:框架,类加载器方式,JavaBean,内省,BeanUtils工具包
来源:互联网 发布:python dat文件格式 编辑:程序博客网 时间:2024/06/06 03:26
框架
1、框架:通过反射调用Java类的一种方式。
如房地产商造房子用户住,门窗和空调等等内部都是由用户自己安装,房子就是框架,用户需使用此框架,安好门窗等放入到房地产商提供的框架中。
框架和工具类的区别:工具类被用户类调用,而框架是调用用户提供的类。
2、框架理解:
我们在写框架(造房子的过程)的时候,调用的类(安装的门窗等)还未出现,那么,框架无法知道要被调用的类名,所以在程序中无法直接new其某个类的实例对象,而要用反射来做。
3、简单框架程序的步骤:
1)右击项目File命名一个配置文件如:config.properties,然后写入配置信息。如键值对:className=java.util.ArrayList,等号右边的配置键,右边是值。
2)代码实现,加载此文件:
①将文件读取到读取流中,要写出配置文件的绝对路径。
如:InputStream is=new FileInputStream(“配置文件”);
②用Properties类的load()方法将流中的数据存入集合。
③关闭流:关闭的是读取流,因为流中的数据已经加载进内存。
3)通过getProperty()方法获取className,即配置的值,也就是某个类名。
4)用反射的方式,创建对象newInstance()。
5)执行程序主体功能
类加载器方式管理资源和配置文件
类加载器是将.class的文件加载进内存,也可将普通文件中的信息加载进内存
绝对路径,通过getRealPath()方法运算出来具体的目录,而不是内部编码出来的。
一般先得到用户自定义的总目录,在加上自己内部的路径。可以通过getRealPath()方法获取文件路径。对配置文件修改是需要要储存到配置文件中,那么就要得到它的绝对路径才行,因此,配置文件要放到程序的内部。
2)name的路径问题:
①如果配置文件和classPath目录没关系,就必须写上绝对路径,
②如果配置文件和classPath目录有关系,即在classPath目录中或在其子目录中(一般是资源文件夹resource),那么就得写相对路径,因为它自己了解自己属于哪个包,是相对于当前包而言的。
JavaBean
一个类中含有set与get方法,都可以称作JavaBean类。
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。
这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
利用反摄:一般来说通过get方法与set方法可以获取和操作JavaBean类中的属性,但是在框架设计中,事先并不知道get和set哪一个成员属性。需要通过反射来完成。
而通过反射获取set和get方法相对麻烦,于是SUN公司提供了对JavaBean类进行操作的一些API————内省
package com.sf.test;public class TestJavaBeans {/** * @param args */private int x;private int y;public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}
注:以下代码,以后建议使用简单的内省操作,不使用需要遍历的复杂操作
package com.sf.test;import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class WeekDay {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubString propertyName="x";TestJavaBeans test=new TestJavaBeans();test.setX(4);test.setY(5); <span><span class="comment">//用内省的方式</span><span> </span></span> PropertyDescriptor properties=new PropertyDescriptor(propertyName, test.getClass());//Method getMethod=properties.getReadMethod();//getMethod.invoke(test);System.out.println(getProperty(propertyName,test));setProperty(propertyName, test);//System.out.println(getMethod.invoke(test));System.out.println(test.getX());//复杂内省操作,通过BeanInfo获取BeanInfo实例,再通过实例获取所有属性描述,再遍历BeanInfo beanInfo=Introspector.getBeanInfo(test.getClass());PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();Object retval; //遍历 for(PropertyDescriptor propertyDescriptor:propertyDescriptors){if(propertyDescriptor.getName().equals(propertyName)){Method methodGet=propertyDescriptor.getReadMethod();retval=methodGet.invoke(test);break;}}}private static void setProperty(String propertyName, Object object)throws IntrospectionException, IllegalAccessException,IllegalArgumentException, InvocationTargetException {PropertyDescriptor properties1=new PropertyDescriptor(propertyName, object.getClass());<span><span class="comment">//创建对象关联</span><span></span></span>Method setMethod=properties1.getWriteMethod();<span><span class="comment">//获取JavaBean类中的set方法</span><span></span></span>setMethod.invoke(object, 10);//调用方法}private static Object getProperty(String propertyName, Object object)throws IllegalAccessException, InvocationTargetException, IntrospectionException {PropertyDescriptor properties=new PropertyDescriptor(propertyName, object.getClass());Method getMethod=properties.getReadMethod();Object retval=getMethod.invoke(object);return retval;}}
BeanUtils工具包
static String
getProperty(Object bean, String name)
static void
setProperty(Object bean, String name, Object value)
2.BeanUtils工具类可以对属性进行级联操作,例如Point类还有 变量Private Date Birthday ,而Date(java.util.Date)类中有setTime方法,那么也就相当于Date类型对象有一个time属性,BeanUtils就可以对其进行操作:
- Java高新技术:框架,类加载器方式,JavaBean,内省,BeanUtils工具包
- JAVA高新技术——JavaBean、内省、BeanUtils工具包
- java高新技术—JavaBean与Beanutils工具包
- 泛型、JavaBean内省、beanutils工具包
- Java 内省、JavaBean、BeanUtils
- Java 内省、JavaBean、BeanUtils
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包
- java高新技术:内省javaBean
- Java高新技术 JavaBean内省
- 黑马程序员------------------内省,JavaBean,BeanUtils工具包
- 内省—beanutils工具包 操作javabean属性
- JavaBean内省:认识JavaBean与内省、对JavaBean的内省操作、Beanutils工具包
- javaBean类,以及Sun的java内省机制与apache的BeanUtils框架/工具简单应用
- java 高新技术【7】 内省,javabean,BeanUtils以及 java7的新特性
- java 高新技术【7】 内省,javabean,BeanUtils以及 java7的新特性
- 黑马程序员——Java高新技术——内省JavaBean及BeanUtils的应用、注解等
- 内省javabean---类加载器
- 黑马程序员——高新技术(内省、javaBean、BeanUtils工具)
- 日积月累Learning Linux(一):在Linux下安装Git工具
- html5新增的和废除的标签
- Eclipse中更改默认java代码格式
- 使用Django框架实现游戏网站搭建
- Leetcode dfs Path Sum
- Java高新技术:框架,类加载器方式,JavaBean,内省,BeanUtils工具包
- C++位操作技巧
- 机房收费系统个人重构3——sqlHelper
- Valid Number
- 引用类型String的操作
- hdu1671 && POJ——Phone List
- C++
- eclipse字体大小设置
- oracle表空间基本命令,修改数据表结构基本命令