javaBean:一般javabean放在domain包裏面
- 必須爲成員提供get/set方法(兩者中只提供一個也是可以的)
- 必須要有默認構造器(沒參的)
- 一般對於具有get/set方法的成員變量稱之爲屬性
- 布爾值屬性開頭可以是get也可以是is
內省就是通過反射來操作javabean,但他比使用反射要方便一些
內省類->bean信息->屬性描述符->屬性的get/set對應的Method->接下去就反射了
我們需要提供javaBean類
BeanInfo info=Introspector.getBeanInfo(User.class) 得到javaBean的BeanInfo
commons-beanutils:依賴內省完成
導包> commons-beanutils.jar
commons-logging.jar
public class BeanUtilsLearn {
@Test
public void fun() throws Exception{
String className="com.cn.domain.User";
Class cl=Class.forName(className);
Object bean=cl.newInstance();
BeanUtils.setProperty(bean, "name", "陳陳陳");
BeanUtils.setProperty(bean, "age", 23);
int age=Integer.parseInt(BeanUtils.getProperty(bean, "age"));//返回String,強轉
System.out.println(BeanUtils.getProperty(bean, "name"));
System.out.println(age);
}
}
1.
String className = "xxx.xxx.";
Class beanClass = Class.forName(className);
Object beanInstance = beanClass.newInstance();
2.
public class Employee {
public Employee(); // Zero-arguments constructor
public String getFirstName();
public void setFirstName(String firstName);
public String getLastName();
public void setLastName(String lastName);
public Date getHireDate();
public void setHireDate(Date hireDate);
public boolean isManager();
public void setManager(boolean manager);
public String getFullName();
}
太簡單了吧。。。都不用反射了。。。是吧。。。
用BeanUtils 把map中的數據封裝成javabean
@Test
/**
* 把map中的屬性直接封裝到一個bean中
* Map:{"name":"zhang","age","111"}
* 我們要把map中的數據封裝到一個javabean中要求map的鍵要和bean的屬性相同
*/
public void map() throws Exception{
Map<String,String> map=new HashMap<String,String>();
map.put("name", "陳陳");
map.put("age", 12+"");
User u=new User();
BeanUtils.populate(u, map);
System.out.println(BeanUtils.getProperty(u, "name"));
System.out.println(BeanUtils.getProperty(u, "age"));
}
寫一個工具類
public class ChenUtils {
/**
* @throws Exception
* @throws InstantiationException
*
*/
public static <T>T toBean(Map map,Class<T> clazz ) throws InstantiationException, Exception{
/**
* 1.創建指令類型的javaBean
*/
T bean=clazz.newInstance();
/**
* 2.把數據封裝到javabean中
*/
BeanUtils.populate(bean, map);
/**
* 3.返回javabean對象
*/
return bean;
}
}
測試工具類
public class TestUtils {
@Test
public void te() throws Exception{
User user;
Map<String,String> map=new HashMap<String,String>();
map.put("name", "阿毛");
map.put("age", 22+"");
user=ChenUtils.toBean(map,cl);
System.out.println(BeanUtils.getProperty(user,"name"));
}
}
jsp中的javabean標籤,已經不用
jsp中與javaBean相關的標籤 這是model1全用jsp時候的事情,知道就好了。已經不用了。
<jsp:useBean> 創建或查找bean
<jsp:useBean id="user1" class="com.cn.domain.User" scope="session"/> scope可以是page request session application
<jsp:setProperty>
<jsp:setProperty property="username" name="user1" value="admin"/>
<jsp:getProperty>
<jsp:getProperty property="username" name="user1"/>獲取名爲user1的javabean的名爲username屬性值