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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章