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.CciTemplateJCA CCI连接
jdbc.core.JdbcTemplateJDBC连接
jdbc.core.namedparam.NamedParameterJdbcTemplate支持命名参数的JDBC连接
jdbc.core.simple.SimpleJdbcTemplate通过Java5简化后的JDBC连接(Spring3.1中已经废弃)
orm.hibernateTemplateHibernate 3.x以上的Session
orm.ibatis.SqlMapClientTemplateiBATIS SqlMap客户端
orm.jdo.JdoTemplateJava数据对象(Java Data Object)实现
orm.jpa.JpaTemplateJava持久化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的主要内容,如果未能解决你的问题,请参考以下文章

Spring实战读书笔记Spring装配Bean

Spring实战读书笔记Spring装配Bean

Spring实战笔记:Web中的Spring

Spring实战笔记二

Spring Boot实战笔记-- Spring高级话题(计划任务)

Spring Boot实战笔记-- Spring高级话题(组合注解与元注解)