《Spring3.0就这么简单》
第一章 认识Spring
1、Spring提供的IOC容器,是Spring大杀器之一。容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创建、拼接、管理、获取工作
2、Spring提供的第二大杀器,就是对AOP面向切面编程的支持。
3、Spring Data让对数据的访问更加容易。
第二章 IOC
1、通过BeanFactory启动IOC容器的时候,并不会初始化配置文件中的Bean,初始化动作发生在第一个调用的时候。对于单例的Bean来说,BeanFactory会缓存该实例,第二次调用的时候直接从缓存中获取该bean。
2、ContextApplication在初始化应用上下文的时候就实例化所有的单例bean,因此启动时间会比BeanFactory长,但是没有第一次调用惩罚问题。
3、WebApplication是专门为Web而准备的,从WebApplication可以获得ServletContext的引用,ServletContext是web应用的上下文。WebApplication的初始化方式和上述两种Factory有所不同,因为需要ServletContext实例,所以必须在拥有web容器的前提下才能完成启动工作。
Spring提供了两种方式用于初始化WebApplicationContext,ServletContext监听器、自启动Servlet。其中只有Servlet2.3以上版本的Web容器才支持ServletContext监听器方式初始化WebApplicationContext。具体如何配置,带后文补充。。。。。
4、容器、配置信息、应用实现之间的关系,个人认为这张图很能说明问题

5、采用util命名空间配置集合类的bean;采用p命名空间简化配置
6、Bean的作用域

第五章Hibernate
1、Hibernate4建议使用与线程绑定的原声CurrentSession,不再使用HibernateTemplate。
2、延迟加载的问题。
Hibernate允许对关联属性、对象进行延迟加载,但是必须保证延迟加载的操作限于同一个额 Hibernate Session 范围之内。如果Service层返回一个启用了延迟加载功能的领域对象给Web层,当Web层访问到那些需要延迟加载的数据的时候,由于加载领域对象的Hibernate Session已经关闭,将导致延迟加载数据的访问异常。
Spring为此专门提供了一个OpenSessionViewFilter过滤器,主要供您能就是让每个请求过程绑定一个HibernateSession,即使最初的事务已经完成了,也可以在Web层进行延迟加载的操作。
OpenSessionViewFilter过滤器将Hibernate Session绑定到请求线程中,它将自动被Spring的事务管理器探测到。所以OpenSessionViewFilter适用于Service层使用HibernateTransactionManger或者JtaTransactionManger进行事务管理的环境,也可以用于非只读事务的数据操作中。
要启用这个过滤器,必须在web.xml中进行配置:
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param> <param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

补充一下,Spring针对Hibernate的非JPA实现用的是OpenSessionInViewFilter,如果采用Spring Data JPA,使用的是OpenEntityManagerInViewFilter
第7章SpringMVC
1、controller中,如果希望方法入参也添加到模型中,只需要在相应的入参前面使用@ModeAttribute
2、Spring MVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器。如果处理方法的入参为Map或者Model类型(org.springframework.ui.Model,类似于Map,比Map更易用),SpringMVC会将隐含模型的应用传递给这些入参。于是开发者可以通过这个入参访问到模型中的所有数据,也可以向模型中添加新的属性数据。
3、Spring3.0有自己独立的校验框架,同时支持JSR303标准的校验框架,但是本身并不提供JSR303的实现,可以包含HibernateValidatorJSR303的实现jar,供Spirng使用。如下:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
LoacalValidateorFactoryBean实现了Spirng的Validator接口,同时也实现了JSR303的Validator接口。只要在Spring容器中定义一个LocalValidatorFactoryBean即可。与此同时,Spring提供的标签<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,不用我们再单独声明bean。
4、校验结果的返回
srpingMVC会将实施校验的结果保存在被校验入参对象之后的BindingResult对象或者Errors对象中,同时这些校验结果也会保存在隐含模型中,可以在JSP页面中通过<form:errors path="*">或者<form:errors path="userName" cssClass="errorClass">来显示校验错误信息。
《Spring3.0就这么简单》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- iOS开发——网络编程Swift篇&(八)SwiftyJSON详解
SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...
- SAP BW 通过视图创建数据源(无单位)
因业务明细表中数量没有单位,所以BW创建数据源时,需做增强 数据表: ZDB_H(抬头) ZDB_I(明细) ECC 系统中: 1.创建视图ZVDBWQ,因明细表中数量没有单位,所以创建视图时不包括数 ...
- visualvm连接服务器jvm进行监控
本地环境,mac: 服务器环境ubuntu: 直接运行jstatd命令,提示 Could not create remote object access denied ("java.util ...
- spring源码分析之spring-web web模块分析
0 概述 spring-web的web模块是更高一层的抽象,它封装了快速开发spring-web需要的基础组件.其结构如下: 1. 初始化Initializer部分 1.1 Servlet3.0 的 ...
- 10+ commonly using find command switches with example Unix/Linux
http://crybit.com/find-command-usage-with-example-unixlinux/ find command is one of the best search ...
- redis终于有比较大的进展了,redis3.0.1 稳定版本发布,支持集群。
原文地址:https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEASENOTES Redis 3.0 release notes --[ ...
- Helpers\URL
Helpers\URL The URL class is used for having handy methods or redirecting the page and returning the ...
- Npoi 导出Excel 下拉列表异常: String literals in formulas can't be bigger than 255 Chars ASCII
代码: public static void dropDownList(string[] datas, string filePath) { HSSFWorkbook workbook = new H ...
- CSS skills: 4) goto page head script
//返回顶部 $(document).on('click', '.backTop', function (e) { $('html, body').animate({scrollTop: 0}, 50 ...
- block的简单使用:点击按钮在另一个控制器内调用block内的代码
1.自定义一个继承于UIButton的按钮 2.声明block: 返回值类型 函数名 参数列表 typedef void (^ButtonBlock)(UIButton *); @interfa ...