JavaBean规范

JavaBean规范

1. JavaBean规范

  1. 类必须是具体的和公共的。
  2. 有无参的构造方法。
  3. 可能有getter和setter方法。

2. JavaBean的反(自)省机制

​ 我们拿到一个JavaBean,就可以拿到它的可读和可写的属性 或者属性名,字段。一般来说我们需要拿到可读可写属性;有个这些属性,可以通过反射去完成读写功能。可以通过Introspector类可以拿到一个BeanInfo对象。

在JavaBean上进行内省,了解其所有属性、公开的方法和事件。 
static BeanInfo getBeanInfo(Class<?> beanClass) 
  • BeanInfo类
MethodDescriptor[] getMethodDescriptors() 获取bean中所有的方法。
PropertyDescriptor[] getPropertyDescriptors() 获取bean中所有的字段(包括class字段)。
  • 应用
//获取到bean对象信息                                                                 
BeanInfo beanInfo = Introspector.getBeanInfo(Student.class);                  
//获取到bean的字段                                                                  
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {           
    //打印每个bean的字段信息                                                           
    System.out.println(propertyDescriptor);                                   
    //获取每个字段对应的读的方法                                                      
    System.out.println(propertyDescriptor.getReadMethod());                   
    //获取每个字段对应的写的方法                                                       
    System.out.println(propertyDescriptor.getWriteMethod());                  
}                                                                             

3. BeanUtils工具类

  • 需要导入的包
commons-beanutils-1.9.2.jar
commons-logging-1.2.jar
commons-collections-3.1.jar
  • maven依赖
<!--拷贝beanutil属性的包-->                             
<dependency>                                      
    <groupId>commons-beanutils</groupId>          
    <artifactId>commons-beanutils</artifactId>    
    <version>1.9.3</version>                      
</dependency>                                     
<dependency>                                      
    <groupId>commons-collections</groupId>        
    <artifactId>commons-collections</artifactId>  
    <version>3.2.1</version>                      
</dependency>                                     
<dependency>                                      
    <groupId>commons-logging</groupId>            
    <artifactId>commons-logging</artifactId>      
    <version>1.2</version>                        
</dependency>                                                                  

​ beanutils类主要用于对象的属性拷贝:1、同一个类之间的属性拷贝;2、不同类之间属性拷贝;3、把Map里面的元素拷贝到对象中去。

​ 基于这种优势,在servlet中,request携带前台的数据封装在一个map集合中,我们可以将这个map集合中的数据拷贝到JavaBean对象中,因此我们可以设计一个工具类来专门实现对象属性的拷贝工作。

  • 自定义的BeanUtil工具类
import org.apache.commons.beanutils.BeanUtils;//导入beanutils类
import javax.servlet.http.HttpServletRequest;
public class BeanUtil {
    //通过泛型指定将要new的bean类型
    public static <T> T getBean(HttpServletRequest request,Class<T> cls){
        T t = null;
        try {
            //创建一个指定类型的bean对象
            t = cls.newInstance();
            //将request对象携带的数据拷贝到bean对象中
            BeanUtils.copyProperties(t,request.getParameterMap());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }
}
  • servlet中的使用
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        User user = BeanUtil.getBean(req, User.class);
        System.out.println(user);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章