黑马软件工程师-Java基础学习之内省(IntroSpector)、注释(Annotation)
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、内省(IntroSpector)
用于对javaBean进行操作,javaBean特殊的java类
javaBean1、用内省方式对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、注解的应用结构图(见知识图)
@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培训、期待与您交流! ----------------------