JDK1.5的新特性:javabean、注解类、类加载器

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来。

—————————————————————————————————————————————————————————————————————————

一、javaBean一、概述

JavaBean是符合某种规范的Java组件,也就是Java类。它必须满足如下规范:

1)必须有一个零参数的默认构造函数

2)必须有get和set方法,类的字段必须通过get和set方法来访问。

(get方法无参,set方法有参)

比如下面的一个类就是一个JavaBean类

package cn.jinfulin.day2.javabean;/** * @author 金福林 * */public class UserBean {private String name;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

二、内省

那么javabean类如何操作呢,这里就要说一下java内省机制了。

JDK提供了对JavaBean进行一些操作的API,这套API就是内省。

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

例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。

通过内省调用JavaBean示例

1、通过PropertyDescriptor调用,相对简单一些</p><p>PropertyDescriptor 描述 JavaBean类,通过一对存储器方法导出的一个属性。

package cn.jinfulin.day2.javabean;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * @author 金福林 * */public class IntroBean {public static void main (String[] args) throws Exception{String propertyName = "name";Object user = new UserBean();setMethod(propertyName, user);getMethod(propertyName, user);}private static void getMethod(String propertyName, Object user)throws IntrospectionException, IllegalAccessException,IllegalArgumentException, InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, user.getClass());Method MethodGetName = pd.getReadMethod();MethodGetName.invoke(user, null);}private static void setMethod(String propertyName, Object obj) throws Exception{//PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。 PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());Method MethodSetName = pd.getWriteMethod();MethodSetName.invoke(obj, "jinfulin");}}2,通过Introspector类调用,相对复杂一些

如下,改写的setMethod方法

private static Object setMethod(String propertyName, Object obj) throws Exception{BeanInfo bean = Introspector.getBeanInfo(obj.getClass());PropertyDescriptor[] pds = bean.getPropertyDescriptors();Object returnvalue = null;for (PropertyDescriptor pd : pds) {if (pd.getName()==propertyName) {Method methodGetX = pd.getReadMethod();returnvalue = methodGetX.invoke(obj);}}return returnvalue;}三、BeanUntils工具包1,概述

BeanUntils工具包是针对javabean的操作属性的工具类,使用比较广泛。

它并不是sun公司开发的而是阿帕奇公司开发的第三方工具包,需要单独下载才能使用。

导入jar包的方法比较简单,就不详细说了,但是要记的不仅要导入BeanUntils工具包,还要导入logging包

public static void main(String[] args) throws Exception{UserBean bean = new UserBean();BeanUtils.setProperty(bean, "name", 12);//set方法BeanUtils.getProperty(bean, "name");//get方法}此时再调用Javabean的set和get方法,一下子就变得只剩下2行代码了,感觉棒棒哒。

2,对于JavaBean中的属性是对象的操作

假如我的javaBean类返回的是对象,而这个对象还拥有get和set方法(比如date对象有getTime()和setTime()方法)

比如

private Date birthday;public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}那么此时调用就可以多层调用

BeanUtils.setProperty(bean, "birthday.time", 12);

3,PropertyUtils工具类

PropertyUtils工具类用法跟BeanUtils基本一样。

区别: 1)BeanUtils会对JavaBean的属性的类型进行转换,如属性本身是integer,会转换为String。 2)PropertyUtils以属性本身的类型进行操作。

二、注解类一,概述

注解可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记。

二、lang包中三个常用注解类

1,Override—-表示一个方法声明打算重写超类中的另一个方法声明。

2,Deprecated—-过时的

3,SuppressWarnings—-忽略警告信息(不提示过时信息)

三、注解中反射的调用public static void main(String[] args) {//如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。if (AnnotationTest.class.isAnnotationPresent(IAnncation.class)) {//如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。IAnncation anno = AnnotationTest.class.getAnnotation(IAnncation.class);System.out.println(anno);}}四、元注解:注解的注解

上面那个反射的例子直接执行是肯定不能成功的,因为我们还没有写注解类,也没有更改元注解的内容。

元注解就是在定义注解类的时候加注解,元注解通常包括两个,即Retention和Target。

1,Retention

Retention有三种取值

RetentionPolicy.SOURCE—-java源文件时期,编译器要丢弃的注释。

RetentionPolicy.CLASS—编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。(默认)

RetentionPolicy.RUNTIME—-编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

//运行时检测注释@Retention(RetentionPolicy.RUNTIME)public @interface IAnncation {}2,Target

用于注解类的使用位置

ElementType.TYPE——类、接口(包括注释类型)或枚举声明可以使用该注解

ElementType.METHOD—–方法中可以使用该注解

ElementType.ANNOTATION_TYPE ——注释类型声明

CONSTRUCTOR ——构造方法声明

FIELD ——-字段声明(包括枚举常量)

LOCAL_VARIABLE——局部变量声明

PACKAGE ——-包声明

PARAMETER ——–参数声明

@Target({ElementType.TYPE,ElementType.METHOD,ElementType.ANNOTATION_TYPE})public @interface IAnncation {}五、为注释增加属性

如果只有一个value名称的属性或其他属性缺省,则可@注解名(”属性值”);

以后我会去到很多很繁华或苍凉,

JDK1.5的新特性:javabean、注解类、类加载器

相关文章:

你感兴趣的文章:

标签云: