getBean和getModel的區別:
getBean只是一個javaBean,getModel是一個和數據庫映射的Java Model.
getBean依賴set和get方法,getModel基於put和get.
getBean()的使用
html代碼:
<form action="/">
<input name="article.title" type="text">
<input name="article.content" type="text">
<input name="article.remark" type="text">
</form>
如果這邊不用article.xxxx,使用其他的一個別名,假如使用ar1.xxx,這邊getBean的時候可以使用:
Article article = getBean(Article.class,"ar1");
實體model:
public class Article {
private String title;
private String content;
private String remark;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "Article{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
", remark='" + remark + '\'' +
'}';
}
}
action:
Article article = getBean(Article.class);
getBean源碼解析:
public class Injector {
public static final <T> T injectBean(Class<T> beanClass, String beanName, HttpServletRequest request, boolean skipConvertError) {
Object bean = createInstance(beanClass);
//看beanName是不是空的,不是空的就將beanName. 作爲前綴.
String modelNameAndDot = StrKit.notBlank(beanName) ? beanName + "." : null;
TypeConverter converter = TypeConverter.me();
//獲取request提交的所有數據
Map<String, String[]> parasMap = request.getParameterMap();
Method[] methods = beanClass.getMethods();
Method[] var9 = methods;
int var10 = methods.length;
for(int var11 = 0; var11 < var10; ++var11) {
Method method = var9[var11];
String methodName = method.getName();
//看是否已set開頭,長度不能小於3
if (methodName.startsWith("set") && methodName.length() > 3) {
Class<?>[] types = method.getParameterTypes();
if (types.length == 1) {
//去掉錢三個字母,並把首位變成小寫
String attrName = StrKit.firstCharToLowerCase(methodName.substring(3));
String paraName = modelNameAndDot != null ? modelNameAndDot + attrName : attrName;
if (parasMap.containsKey(paraName)) {
try {
String paraValue = request.getParameter(paraName);
Object value = paraValue != null ? converter.convert(types[0], paraValue) : null;
method.invoke(bean, value);
} catch (Exception var19) {
if (!skipConvertError) {
throw new RuntimeException(var19);
}
}
}
}
}
}
return bean;
}
}