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; } }