黑马软件工程师-Java基础学习之内省(IntroSpector)、注释(Annotation)

黑马程序员--Java基础学习之内省(IntroSpector)、注释(Annotation)
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

一、内省(IntroSpector)

用于对javaBean进行操作,javaBean特殊的java类

javaBean

1、用内省方式对javaBean的属性进行set get操作

Person p = new Person("zhangsan",23);
PropertyDescriptor pd = new PropertyDescriptor("name",p.getClass());
Method methodGetName = p.getReadMethod();
Object retVal = methodGetName.invoke(p);

Method methodSetName = p.getWriteMethod();
Object retVal = methodGetName.invoke(p,"zhang");

2、使用BeanUtils工具包操作javaBean

    需要导入BeanUtils包以及第三方jar包(log包)

    好处:(1)类型自动转换,使用String

                (2)支持属性的级联 Data data = new Data();

                       data.time作为属性来用

                (3)BeanUtils可以操作map

                        sop(BeanUtils.setProperty(p,"age"),"23");//参数为String

                       sop(BeanUtils.getProperty(p,"age"));

PropertyUtils不进行类型转换


二、注解Annotation(1.5之后)

@Override  @Deprecated  @SuppressWarnings

1、也叫元数据。相当于一种标识

2、作用分类

        (1)编写文档:通过代码里标示的元数据生成文档(生成doc文档)

        (2)代码分析:通过元数据对代码进行分析(使用反射)

        (3)编译检查:通过标示的元数据让编译器实现基本的编译检查(Override)

3、使用位置

      包 类 成员变量 方法 局部变量

4、注解相当于一种特殊的类

5、注解的应用结构图(见知识图)

黑马软件工程师-Java基础学习之内省(IntroSpector)、注释(Annotation)

            @Override    RetentionPolicy.SOURCE

            @Deprecated         RetentionPolicy.RUNTIME

            @SuppressWarningsRetentionPolicy.SOURCE


            @Target(ElementType.METHOD)//该注解用在方法上

            @Target({ElementType.METHOD,ElementType.Type})//该注解用在方法和类型上


            Class类实现Type接口  Class  Enum  @Override  Interface 都是Type(1.5之后)

注解类

@Retention(RetentionPolicy.RUNTIME)//元注解 ,三个阶段
@Interface A{
}

使用注解类的类

@A
class B{
}

对使用注解的类使用反射

@A
class C{
      if(C.class.isAnnotationPresent(A.class)){
             A ann = (A)C.class.getAnnotation(A.class);  
      }
}

6、注解的属性

@Retention(RetentionPolicy.RUNTIME)//元注解 ,三个阶段
@Interface A{
	String color() default "red";
	Strng value();//value()属性很特殊
	int[] arr() default {1,2,2};

}
@A(color="red",value="set",arr={1,2,3})//设置,如果只有value属性需要设置时,可以把=号省略@A("setValue")
class C{
	if(C.class.isAnnotationPresent(A.class)){
		A ann = (A)C.class.getAnnotation(A.class);  
		sop(ann.color());//使用
		sop(ann.value());//使用
		sop()
	}
}

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------