Javabean三大成员
事件(event),方法(),属性(property)
主要使用javabean中的属性
1.属性是getter和setter推导出来的,由get和set决定
2.属性与字段没有关系,getName==>name
类型:getName,isMan(boolean类型)
Lombok(代码生成工具)
使用方法:加lib包–>Add as Libary
@AllArgsConstructor(所有有参构造器),@NoArgsConstructor(无参构造器),@setting…
内省(introspector)
作用:专门操作javaBean中的多个属性,可以直接轻松进行操作
反射:需要获取方法并遍历后,使用方法去操作属性
内部核心类:Introspector
内省常使用的API
1.使用字节码对象 获取当前类对象
BeanInfo bf=Introspector.getBeanInfo(User.class,Objiect.class);
2.获取javaBean的属性描述器(数组多个)
PropertyDescriptors[] pds=bf.getPropertyDescriptors()
3.获取属性的相关信息
User u=new User();
for(PropertyDescriptor pd:dps){
pd.getName()//获得转换后的名字
//获取属性类型
pd.getPropertyType
//获取getter方法
pd.getReadMethod
//获取里面的Setter方法
Method write=pd.getWriteMethod()
if("name".equals(pd.getName)){
write.invoke(u,"李少")
}
}
javaBean与Map集合之间的转化
可以转化的原因:javaBean和Map在数据结构上相似
注意事项:Map转JavaBean的时候注意使用泛型以满足用户使用的类型
public static <T> T map2javabean(Map<String, Object>map,Class<T> clz )
for (PropertyDescriptor pd : pds) {
//获取属性名,作为map的key
String key = pd.getName();
//获取map的key的值
Object value = map.get(key);
//调用属性对应的setter方法,封装数据
Method writeMethod = pd.getWriteMethod();
writeMethod.invoke(bean, value);
}
注解(Annotation)
作用:描述程序元素(类,方法,形参等等)
三元素:1.注解本身,2.被贴的程序元素,3.第三方程序赋予的功能
注解的创建方法:
创建类为Annotation:public interface 类名{}
元注解:描述注解的注解,能贴在哪里
@target:注释可以贴在哪里,@target({ElementType.TYPE,ElementType.FIELD}}
TYPE(类),FIELD(字段),METHOD(方法),PARAMETER(参数),CONSTRUCTOR(构造器),PACKAGE(包)
@Retention:注释可以保存到什么时间,@Retention(RetentionPolicy.RUNTIME)
SOURCE(编译时期),CLASS(创建了类时),RUNTIME(运行时间)
注解语法
//创建注解
//元注解
//当前注解保存到运行时期
@Retention(RetentionPolicy.RUNTIME)//该注解保存到什么时候
//当前注解能贴在类,接口,字段上
@Target({ElementType.TYPE,ElementType.FIELD})//该注解贴在哪里
public @interface MyAnnotation {
//传的参数,有默认值可传可不传
String name() default"xxxx";
int age() default 10;
String value() default "";
}
//这里的单个数据直接传递给value属性
//只给value属性传值,可以省略属性名
@MyAnnotation("")