Spring in Action 第二部分学习笔记

Spring in Action 第二部分内容范围是第5章到第9章, 主要是介绍Spring应用程序的常用元素。

第5章 征服数据库
Spring提供了一组数据访问框架,集成了多种数据访问技术,可以消除持久化代码中单调枯燥的数据访问逻辑。支持JDBC,iBATIS,Hibernate等多个持久化框架,帮忙处理底层的数据访问。

5.1 Spring的数据访问哲学
Spring对数据的访问遵循OOP原则中的面向接口编程,DAO数据访问对象以接口的方式发布功能,而应用程序的其它部分就可以通过接口来进行访问。服务对象本身并不会处理数据访问,而是将数据访问委托给DAO。DAO接口确保其与服务对象的松耦合。
1.Spring的数据访问异常体系:数据访问异常要具有描述性而且又与特定的持久化框架无关
~Spring的平台无关持久化异常
~不需要些catch代码块
Spring使用非检查型异常,继承自RuntimeException的异常。
2.数据访问模板化
Spring将数据访问过程中固定的可变的部分明确划分为两个不同的类:模板和回调。模板管理过程中固定的部分,回调处理自定义的数据访问代码。
3.使用DAO支持类
持久层的DAO可以继承自DAO支持类并调用模板获取方法来直接访问底层的数据访问模板

5.2 配置数据源
Spring的持久化功能依赖于数据源,Spring提供了三种配置数据源Bean的方式:
1.使用JNDI数据源
2.使用数据源连接池:DBCP包含了多个提供连接池功能的数据源,BasicDataSource是最常用的
可以配置这样一个BasicDataSource:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb://localhost/spitter/spitter"/>
<property name="username" value="admin"/>
<property name="password" value="12345"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="10"/>
</bean>

-池配置属性
~initialSize - 池启动时创建的连接数据
~maxActive - 同一时间可从池中分配的最多连接数。如果设置为0,表示无限制
~maxIdle - 池中不会被释放的最多空闲连接数。设置为0表示无限制
...

3.基于JDBC驱动的数据源:这是最简单的配置方式
Spring提供了两种数据源对象:
~DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与DBCP的BasicDataSource不同,由DriverManagerDataSource提供的连接并没有进行池化管理
~SingleConnectionDataSource:在每个连接请求时都会返回同一个连接。
这两个数据源的配置与BasicDataSource配置类似,适用于小应用程序

5.3 在Spring中使用JDBC
JDBC能够更好地对数据访问的性能进行调优,与持久化框架相比,允许在更低的层次上处理数据。
1.应对失控的JDBC代码:样板式代码过多,真正实现功能的代码少
2.使用JDBC模板
Spring的JDBC框架承担了资源管理和异常处理的工作,数据访问的样板式代码提取到模板类中,Spring为JDBC提供了3个模板类供使用:
~!JdbcTemplate:最基本的Spring JDBC模板,这个模板支持最简单的JDBC数据库访问功能以及简单的索引参数查询。
~!NamedParameterJdbcTemplate:可以将查询值以命名参数的形式绑定到SQL。
~!SimpleJdbcTemplate:Spring3.0后功能越发强大
如何使用SimpleJdbcTemplate访问数据:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="dataSource"></bean>
使用命名参数
使用Spring的JDBC DAO支持类

5.4 在Spring中集成Hibernate 
当应用程序越来越复杂的时候,简单的持久化框架无法满足需求,Hibernate作为最流行的持久化框架,提供了作为ORM工具所应具有的所有复杂功能。
1.Hibernate概览
Spring对Hibernate的支持提供了HibernateTemplate的模板类来抽象Hibernate的持久化功能。鉴于上下文Session是使用Hibernate的最佳实践。
2.声明Hibernate的Session工厂
Session接口提供了基本的数据访问的功能,,获取Session对象的标准方式是借助于Hibernate的SessionFactory接口的实现类。SessionFactory主要负责Session的打开,关闭以及管理。
3.构建不依赖于Spring的Hibernate代码

5.5 Spring与Java持久化API
1.配置实体管理器工厂

小结:Spring对JDBC和ORM框架的支持简化了各种持久化机制都存在样板代码,如何使用JDBC,Hibernate或JPA为Spring应用程序构建持久层

第6章 事务管理
全有或者全无的操作被称为事务
6.1 理解事务
1.事务的四个特性 ACID
~!原子性:事务中的所有操作全部发生或全部不发生
~!一致性:业务处于一致的状态
~!隔离性:每个用户的操作不会与其他用户纠缠在一起
~!持久性:事务完成,结果应该持久化,不必担心事务的结果丢失
2.Spring对事务管理的支持
Spring提供了对编码式和声明式事务管理的支持,编码式事务允许用户在代码中精确定义事务的边界,声明式事务有助于用户将操作与事务规则进行解耦。

6.2 选择事务管理器
Spring并不直接管理事务,而是提供了多种事务管理器。将事务管理的职责委托给特定平台的事务实现
1.JDBC事务:DataSourceTransactionManager
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></bean>
使用以上配置将DataSourceTransactionManager声明在应用程序上下文中
2.Hibernate事务:HibernateTransactionManager
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></bean>
3.Java持久化API事务:JpaTransactionManager
4.JTA(Java Transaction API)事务:JtaTransactionManager

6.3 在Spring中的编码事务:细粒化控制事务
6.4 声明式事务:通过AOP实现
1.定义事务属性:事务属性包含5个方面
~传播行为:定义何时要创建一个事物或何时使用已有的事务
~隔离级别:决定一个事物会被其他并行的事务所能影响的程度
~只读
~事务超时
~回滚规则
2.在XML中定义事务
提供tx配置命名空间,简化声明式事务的配置
3.定义注解驱动的事务
<tx:annotation-driven>元素告诉Spring检查上下文中所有的bean并查找使用@Transactional注解的bean。

小结:Spring支持编码式和声明式的事务管理, Spring并不直接管理事务,而是提供了多种事务管理器。将事务管理的职责委托给特定平台的事务实现。

第七章 使用Spring MVC构建Web应用程序
7.1 Spring MVC起步
1.Spring MVC的请求
Spring MVC所有的请求都会通过前端控制器DispatcherServlet,DispatcherServlet将请求发送给对应的控制器。控制器完成逻辑处理之后,将产生的信息(模型)发送给视图,最后控制器将请求连同模型和视图名称发送回DispatcherServlet。
2.搭建Spring MVC
DispatcherServlet 是Spring MVC的核心,像其他servlet一样,DispatcherServlet需要在web.xml文件中进行配置。
第一步 添加<servlet>声明
<servlet>
<servlet-name>spitter</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
DispatcherServlet 默认从spitter-serlvet.xml的文件来加载应用上下文
第二步 声明servlet处理的URL
<servlet-mapping>
<servlet-name>spitter</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
通过将DispatcherServlet映射到/,声明会作为默认的servlet并且处理所有请求,包括对静态资源的请求。
静态资源的请求可以通过<mvc:resources>元素设置

7.2 编写基本的控制器
1.配置注解驱动的Spring MVC
DispatcherServlet可以根据处理器映射明确地将请求分发给指定的控制器。
~BeanNameUrlHandlerMapping:根据控制器Bean的名字将控制器映射到URL。
~ControllerBeanNameHandlerMapping:
~ControllerClassNameHandlerMapping:
~DefaultAnnotationHandlerMapping:
~SimpleUrlHandlerMapping:
在spitter-servlet.xml添加<mvc:annotation-driven/>的到Spring MVC提供的注解驱动特性
2.定义首页的控制器
3.解析视图
DispatcherServlet会查找一个视图解析器将控制器返回的逻辑视图名臣转换成渲染结果的实际视图。
Spring自带了多个视图解析器
~!解析内部视图
在spitter-servlet.xml中配置InternalResourceViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
其余几种视图解析器跟这个类似,解析视图都是为逻辑视图名称添加前缀和后缀,然后查找视图模板。
4.定义首页的视图
5.完成Spring应用上下文
一般会将Spring配置分为多个XML配置文件,而ContextLoaderListener是一个Servlet监听器,它可以加载Spring配置文件到一个Spring应用上下文,为了使用ContextLoaderListener,需要在web.xml文件中添加如下的<listener>声明:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果没有定义加载什么配置文件,会默认查找/WEB-INF/applicationContext.xml这个配置文件。我们可以在
applicationContext.xml中将多个配置文件引入。或者在servlet上下文中配置contextConfigLocation参数:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spitter-security.xml
classpath:service-context.xml
</param-value>
</context-param>

7.3 处理控制器的输入
控制器往往基于URL参数或表单数据所传递进来的信息执行一些逻辑
1.编写处理输入的控制器
2.渲染视图

7.4 处理表单
处理表单涉及两个操作:展现表单与处理表单提交
1.展现注册表单
...
小结:Spring MVC是一个强大灵活的Web框架,里面有很多内容可以学习,可以在编码中进行学习。

第八章 使用Spring Web Flow
Spring Web Flow是Spring MVC的扩展,它能够在Spring中实现面向会话的Web开发
8.1 安装Spring Web Flow
下载JAR文件-->在Spring 配置文件中添加对应命名空间-
...
小结:这一章太抽象,实在是读不下去。

第九章 保护Spring应用
9.1 Spring Security介绍
Spring Security是为基于Spring 的应用程序提供声明式安全保护的安全性框架
1.Spring Security起步
将模块添加到应用程序的类路径
2.使用Spring Security配置命名空间

9.2 保护Web请求
在Web请求级别对用户进行权限限制。
1.代理Servlet过滤器
Spring Security提供DelegatingFilterProxy这个特殊的Servlet过滤器,这个过滤器可以链接多个其他的过滤器
你需要在web.xml中添加如下的<filter>:
<filter><filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
2.配置最小化的Web安全性
<http auto-config="true">
<intercept-url pattern="*/**" access="ROLE_SPITTER"/>
</http>
通过这个配置可以拦截所有URL请求,并限制只有拥有ROLE_SPITTER角色的认证用户才能访问。
~通过表单进行登录
auto-config设置为true,Spring Security将会自动生成登录界面
可以通过设置<form-login>元素指定登录界面
~处理基本认证
~退出
3.拦截请求
~使用Spring表达式进行安全保护
~强制请求使用https

9.3 保护视图级别的元素
Spring Security通过JSP标签库在视图层支持安全性
9.4 认证用户
1.配置内存用户存储库
直接在Spring配置中声明用户的详细信息,使用<user-service>元素
2.基于数据库进行认证
用户名密码保存在数据库内,使用<jdbc-user-service>
3.基于LDAP进行认证
4.启用remember-me

9.5 保护方法调用

小结:Spring Sercurity提供了一种简单灵活且强大的机制来保护我们的应用程序。

第二部分相对来说比较抽象,我没有细读研究,只是做了一个比较简单的读书比较,后续还会继续更新第三部分。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值