黑马程序员之反射与内省

来源:互联网 发布:php培训系统教程下载 编辑:程序博客网 时间:2024/06/05 10:07
 

---------------------- android培训、java培训、期待与您交流! ---------------------- 

框架的概念及用反射开发框架的原理:学反射最主要就是为了写框架:通过反射来调用以后写的类

我们用反射要解决以后的问题:不能够new一个对象了,只能用反射

写一个properties文件来配置属性

首先加载properties文件:

InputStream ips=new FileInputStream(“config.properties”);

Properties props=new Properties();

props.load(ips);

ips.close();//把操作系统的资源释放;

String className =props.getProperty(“className”);

Collection collection =(Collection)Class.forName(className).newInstance();

这样就利用反射创建出了集合对象了

//用类加载器的方式管理资源和配置文件

配置文件要用完整路径,但是完整路径不是硬编码,是运算出来的

类名.class.getClassLoader().getResourceAsStream(“config.properties”);//在ClassPath路径下去找要加载的文件

注意:在Eclipse中在原目录下会自动保存。真正运行时是找到ClassPath目录下的

只要用类加载器加载配置文件,那么我们就把配置文件放在classPath目录下

在Class下也提供了getResourceAsStream()方法,用相对目录就可以;

但是内部都是调用的getClassLoad();

//内省引出JavaBean:

JavaBean是一种特殊的java类里面有get和set方法

private int age;

public int getAge(){

return age;

}

public void setAge(int age){

this.age=age;

}

JavaBean 的属性是通过共有的方法来判断的

特点:去掉get和set,剩下的就是属性名

并且如果第二个字母是小的,那把第一个字母变成小的

并且如果第二个字母是大的,那把第一个字母保持不变

//用内省去操作JavaBean

如果在两个模块之间传递许多个信息,可以将这些信息封装到一个javaBean中,这种javaBean的实例对象称之为值对象(Value Object,简称VO)这些信息在类中用私有字段来存储,如果读取和设置这些字段的值,则通过一些相应的方法来访问

用内省的方式读取javaBean中的私有属性:

首先创建一个对象javaBean的对象pt1

然后:

PropertyDescriptor

pd=new PropertyDescriptor(propertyName,pt1.getClass());

Method methodGetX=pd.getReadMethod();

Object retVal=methodGetX.invoke(pt1);

 

设置一个属性:

Method methodSetX=pd.getWriteMethod();

methodSetX.invoke(pt1,7);

像上面的操作是可以抽出一个方法的一个是setProperty()

getProperty()

用beanInfo改写:BeanInfo beanInfo=introspector.getBeanInfo(pt1.getClass);

PropertyDescriptor[]pds=beanInfo.getPropertyDescriptors();

Object retVal=null;

If(PropertyDescriptor. pd:pds){

If(pd.getName().equals(propertyName)){

Method methodGetX=pd.getReadMethod();

retVal=methodGetX.invoke(pt1);

break;

}

}

//使用BeanUtils工具包操作JavaBean:

BeanUtils.getProperty(pt1,”x”);

BeanUtils.setProperty(pt1,”x”,”9”);

操作Data对象:BeanUtils.setProperty(pt1,”birthday.time”,”111”);

BeanUtils.getProperty(pt1,”birthday.time”);支持属性连

//java7的新特性:

Map map={age:7,name:”zhang”}BeanUtils.setProperty(map,”name”,”zxx”);

propertyUtils.setProperty(pt1,”x”,9);

propertyUtils.getProperty(pt1,”x”);返回的类型是integer

 

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
原创粉丝点击