java api javabean包简单理解和学习
来源:互联网 发布:12306 手机 网络有问题 编辑:程序博客网 时间:2024/05/21 09:46
在DaoSupport 的构建中,为了实现通过传入的参数(为class<T>)来检测正确和构造类的实例,但是当时使用的是java的反射机制和范型来实现的。暂且不讨论范型和注解带来的不便。那么在java api中是不是还有替代上述方式来构建java bean呢?
答案是有的。
详见包java.beans.
我会通过调用
- java.beans.Introspector.getBeanInfo(Class<?> beanClass)拿到beanInfo
- bean.getPropertyDescriptors()拿到 beanClass中的所有的属性
- java.beans.PropertyDescripto.getWriteMethod() /getReadMethod()去调用get/set方法
- java.beans.Beans.instantiate(ClassLoader cls, String beanName)可以用来实例化对象
——注意:
必须注意的是java.beans.PropertyDescripto.getWriteMethod() /getReadMethod()的时候该类必须满足java bean 的格式要求,否则获取的方法对象为null.
测试代码:
package javabeans;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.Beans;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import org.junit.Test;
/**
* javabean确实相对于java inflect来讲要安全的多,可以通过javabean来构建对象而不用担心和学习反射机制
* @author anping
*
*/
public class testJavabean {
@Test
public void testIntrospector() throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, IOException{
BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
BeanDescriptor bean = beanInfo.getBeanDescriptor();
System.out.println(“———-属性修饰器———”);
User user = new User();
user.setAge(1);
user.setUsername(“1111″);
//拿到所有的属性
PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor prop:props){
System.out.println(prop.getName());
//属性调用getXXX的方法
System.out.println(prop.getReadMethod().invoke(user, null));
}
System.out.println(“===========构建bean=========”);
Beans beans = new Beans();
Object object= (User) beans.instantiate(User.class.getClassLoader(), User.class.getName());
System.out.println(object);
for(PropertyDescriptor prop:props){
if(prop.getName().equals(“age”)){
prop.getWriteMethod().invoke(object, 11);
}else if(prop.getName().equals(“username”)){
//属性调用setXXX的方法
prop.getWriteMethod().invoke(object, “aoing”);
}
}
User user2 = (User)object;
System.out.println(user2.getAge()+user2.getUsername());//11aoping
}
}
- java api javabean包简单理解和学习
- Java学习笔记 --- 理解JavaBean 与 Bean
- 简单理解JavaBean
- Java基础复习:JavaBean和Java内省API
- Java API学习(一)java包
- 【Java邮件开发】4.JavaMail API的简单介绍和jar包准备
- 自己学习JavaBean与理解
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- java.util.concurrent包API学习笔记
- Java API学习之十二个包
- java创建一个简单的小框架frame
- Android中资源文件夹res/raw和assets的使用
- win7下面的 android adb 在cmd下报错的解决办法
- Uva 11489 - Integer Game
- LeetCode--Remove Duplicates from Sorted Array II (数组操作)
- java api javabean包简单理解和学习
- 将一批数据以二进制的形式存放在磁盘文件中
- node.js调试
- Javascrip: 利用节点关系访问HTML元素
- 那个人体育类科技化工
- HighCharts 随机数动态曲线展示(动态数据实时展示)
- for_each的用法,转载自蕭鴻森的blog
- R语言回归篇
- java 枚举简单回顾