Spring实战笔记:后端中的Spring
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring实战笔记:后端中的Spring相关的知识,希望对你有一定的参考价值。
一.使用对象-关系映射持久化数据
对象/关系映射(object-relational mapping,ORM)。
在持久层使用ORM工具可以节省术前行代码和大量开发时间。
Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务:
-- 支持集成Spring声明式事务;
-- 透明的异常处理;
-- 线程安全的、轻量级的模板类;
-- DAO支持类;
-- 资源管理。
1.Spring数据访问
遵循面向对象原则中的针对接口编程。将数据访问功能放到专注于此项任务的组件中,即数据访问对象(DAO)或Repository。
运用了模板方法模式。模板方法定义过程的主要框架。模板方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了过程中的具体行为。
Spring将数据访问过程中固定和可变的部分划分为模板(template)和回调(callback)。模板管理过程中固定的部分,回调处理自定义的数据访问代码。
Spring提供的数据访问模板,分别适用于不同的持久化机制。
模板类(org.springframework.*) | 用途 |
jca.cci.core.CciTemplate | JCA CCI连接 |
jdbc.core.JdbcTemplate | JDBC连接 |
jdbc.core.namedparam.NamedParameterJdbcTemplate | 支持命名参数的JDBC连接 |
jdbc.core.simple.SimpleJdbcTemplate | 通过Java5简化后的JDBC连接(Spring3.1中已经废弃) |
orm.hibernateTemplate | Hibernate 3.x以上的Session |
orm.ibatis.SqlMapClientTemplate | iBATIS SqlMap客户端 |
orm.jdo.JdoTemplate | Java数据对象(Java Data Object)实现 |
orm.jpa.JpaTemplate | Java持久化API的实体管理器 |
DBPC BasicDataSource的池配置属性:
池配置属性 | 所指定的内容 |
initialSize | 池启动时创建的连接数量 |
maxActive | 同一时间可从池中分配的最多连接数。如果设置为0,表示无限制 |
maxIdle | 池里不会被释放的最多空闲连接数。如果设置为0,表示无限制 |
maxOpenPreparedStatements | 在同一时间能够从语句池中分配的预处理语句(prepared statement)的最大数量。如果设置为0,表示无限制 |
maxWait | 在抛出异常之前,池等待连接回收的最大时间(当没有可用连接时)。如果设为-1,表示无限等待 |
minEvictableIdleTimeMillis | 连接在池中保持空闲而不被回收的最大时间 |
minIdle | 在不创建新连接的情况下,池中保持空闲的最小连接数 |
poolPreparedStatements | 是否对预处理语句(prepared statement)进行池管理(布尔值) |
自动创建bean时使用@Repository注解
2.在spring中集成Hibernate
使用Hibernate所需的主要接口是org.hibernate.Session。Session接口提供了基本的数据访问功能,如保存、更新、删除以及从数据库加载对象的功能。通过改接口,应用程序的Repository能够满足所有的持久化需求。
获取Hibernate Session对象的标准方式是借助于Hibernate SessionFactory接口的实现类。除了一些其他的任务,SessionFactory主要负责Hibernate Session的打开、关闭以及管理。
@Repository是Spring的另一种构造性注解,它能够像其他注解一样被Spring的组件扫描到。这样就不必声明HibernateSpitterRepository bean了,只要这个Repository类在组件扫描所涵盖的包中即可;另外在Spring应用上下文中添加一个PersistentExceptionTranslationPostProcessor bean捕获异常,这是一个bean后置处理器,它会在所有拥有@Repository注解的类上添加一个通知器(advisor),这样就会捕获任何平台相关的异常以Spring非检查型数据访问异常的形式重新抛出。
@Transcational表明这个Resposity中的持久化方法是在事务上下文中执行的。
二.使用NoSql数据库
有些数据的最佳表现形式是文档。将数据信息收集到一个非规范化(文档)的结构中将更有意义。
文档数据库不适用于具有丰富关联关系的数据。
1.Spring应用中使用MongoDB:
-- 通过注解实现对象-文档映射;
-- 使用MongoTemplate实现基于模板的数据库访问;
-- 自动化的运行时Repository生成功能(推荐)。
@EnableMongRepositories:启用MongoDB的Repository功能。
2.Spring Data Redis为四种Redis客户端实现提供了连接工厂:
-- JedisConnectionFactory
-- JredisConnectionFactory
-- LettuceConnectionFactory
-- SrpConnectionFactory
RedisTemplate(或StringRedisTemplate)简化Redis数据访问,能够持久化各种类型的key-value。
三.缓存数据
缓存(Caching)可以储存经常会用到的信息。
1.启用对缓存的支持:
-- 注解驱动的缓存
@Configuration @EnableCaching -- 启用缓存 public class CachingConfig { @Bean public CacheManager cacheManager() { -- 声明缓存管理器 return new ConcurrentMapCacheManager(); } }
-- XML声明的缓存
<cache:annotation-driven /> -- 启用缓存 <bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager"> -- 声明缓存管理器
Spring内置缓存管理器:
-- SimpleCacheManager
-- NoOpCacheManager
-- ConcurrentMapCacheMap
-- CompositeCacheMap
-- EnCacheCacheManager
-- RedisCacheManager
-- GemfireCacheManager
四.保护方法应用
1.注解方法保护
Spring Security提供了三种安全注解:
-- Spring Security自带的@Secured;
-- JSR-250的@RolesAllowed注解;
-- 表达式驱动的注解,包括@PreAuthorize、@PostAuthorize、@PreFilter和@PostFilter。
@Secured和@RolesAllowed方案类似,能够基于用户所授予的权限限制对方方法的访问。
@PreAuthorize和@PostAuthorize可以在方法上定义更灵活的安全规则。
@PreFilter和@PostFilter能够过滤方法返回的一级传入方法的集合。
注解 | 描述 |
@PreAuthorize | 在方法调用之前,基于表达式的计算结果来限制对方法的访问 |
@PostAuthorize | 允许方法调用,但是如果表达式计算结果为false,将抛出一个安全性异常 |
@PreFilter | 允许方法调用,但必须按照表达式来过滤方法的结果 |
@PostFilter | 允许方法调用,但必须在进入方法之前过滤输入值 |
以上是关于Spring实战笔记:后端中的Spring的主要内容,如果未能解决你的问题,请参考以下文章