Spring篇

目录

Spring

下载Spring

Spring 概述

IoC 的概念和作用

使用 spring 的 IoC 的实现账户的CRUD

基于注解的 IOC 配置

AOP 的相关概念

Spring 中的 JdbcTemplate

Spring 中的事务控制



下载Spring

官网: http://spring.io/
下载地址: http://repo.springsource.org/libs-release-local/org/springframework/spring

Spring 概述

  • Spring是什么

Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

  • spring 的优势

方便解耦,简化开发

通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造 成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

AOP 编程的支持

通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

声明式事务的支持

可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

方便集成各种优秀框架

Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(StrutsHibernateHessianQuartz 等)的直接支持。

降低 JavaEE API 的使用难度

Spring JavaEE API(如 JDBCJavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。


IoC 的概念和作用

  • 程序的耦合和解耦

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)

在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

它有如下分类:
1 )内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。
2 )公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。
3 ) 外部耦合 。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
4 ) 控制耦合 。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作,这种耦合被称为控制耦合。
5 )标记耦合 。若一个模块 A 通过接口向两个模块 B C 传递一个公共参数,那么称模块 B C 之间存在一个标记耦合。
6 ) 数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一些模块的输入数据。
7 ) 非直接耦合 。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
内聚与耦合

内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。


使用 spring IoC 的实现账户的CRUD

  1. 环境搭建
    拷贝 jar 包
    创建数据库和编写实体类
    编写持久层代码
    编写业务层代码
    创建并编写配置文件
  2. 配置步骤
    配置对象
  3. 测试案例
     测试类代码

基于注解的 IOC 配置

常用注解

@Component
作用:
    把资源让 spring 来管理。相当于在 xml 中配置一个 bean。
属性:
    value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名。首字母小写。

@Controller @Service @Repository

 

他们三个注解都是针对一个的衍生注解,他们的作用及属性都是一模一样的。
他们只不过是提供了更加明确的语义化。
@Controller:一般用于表现层的注解。
@Service:一般用于业务层的注解。
@Repository:一般用于持久层的注解。
细节:如果注解中有且只有一个属性要赋值时,且名称是 value,value 在赋值是可以不写。
@Autowired
作用:
    自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功。找不到就报错。
@Qualifier
作用:
    在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。
属性:
    value:指定 bean 的 id。
@Resource
作用:
    直接按照 Bean 的 id 注入。它也只能注入其他 bean 类型。
属性:
    name:指定 bean 的 id。
@Value
作用:
    注入基本数据类型和 String 类型数据的
属性:
    value:用于指定值
@Scope
作用:
    指定 bean 的作用范围。
属性:
    value:指定范围的值。
取值:
    singleton prototype request session globalsession
@PostConstruct
作用:
    用于指定初始化方法。
@PreDestroy
作用:
    用于指定销毁方法
  • Spring 整合 Junit

第一步:拷贝整合 junit 的必备 jar 包到 lib 目录

第二步:使用@RunWith 注解替换原有运行器

第三步:使用 @ContextConfiguration 指定 spring 配置文件的位置
 
第四步:使用 @Autowired 给测试类中的变量注入数据
 

AOP 的相关概念

  • 什么是 AOP
    AOP
    :全称是 Aspect Oriented Programming 即:面向切面编程。
  • AOP 的作用及优势
    作用:
    在程序运行期间,不修改源码对已有方法进行增强。
    优势:
    减少重复代码
    提高开发效率
    维护方便
  • AOP 相关术语
    Joinpoint( 连接点 ):
    所谓连接点是指那些被拦截到的点。在 spring , 这些点指的是方法 , 因为 spring 只支持方法类型的连接点。
    Pointcut( 切入点 ):
    所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。
     
    Advice( 通知 / 增强 ):
    所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。
    通知的类型:前置通知 , 后置通知 , 异常通知 , 最终通知 , 环绕通知。
    Introduction( 引介 ):
    引介是一种特殊的通知在不修改类代码的前提下 , Introduction 可以在运行期为类动态地添加一些方法或 Field
    Target( 目标对象 ):
    代理的目标对象。
    Weaving( 织入 ):
    是指把增强应用到目标对象来创建新的代理对象的过程。
    spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
    Proxy (代理) :
    一个类被 AOP 织入增强后,就产生一个结果代理类。
    Aspect( 切面 ):
    是切入点和通知(引介)的结合。

Spring 中的 JdbcTemplate

JdbcTemplate 概述
它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。 spring 框架为我们提供了很多的操作模板类。
操作关系型数据的:
      JdbcTemplate
      HibernateTemplate
操作 nosql 数据库的:
      RedisTemplate
操作消息队列的:
      JmsTemplate
我们今天的主角在 spring-jdbc-5.0.2.RELEASE.jar 中,我们在导包的时候,除了要导入这个 jar 包外,还需要导入一个 spring-tx-5.0.2.RELEASE.jar (它是和事务相关的)。

Spring 中的事务控制

Spring 中事务控制的 API 介绍

PlatformTransactionManager
PlatformTransactionManager接口提供事务操作的方法,包含有3个具体的操作
    获取事务状态信息
        Transaction Status getTransaction(Transaction Definition efinition
    提交事务
        void commit(Transaction Status status
    回滚事务
        void rollback( Transaction Status status
TransactionDefinition
   获取事务对象名称String getName()
    获取事务隔离级int getlsolationLevell()
    获取事务传播行为int getPropagationBehavior()
    获取事务超时时间int setTimeout()
    获取事务是否只读里务:boolean isReadonly()
事务的隔离级别
事务隔离级反映事务提交并发访问时的处理态度
ISOLATION DEFAULT    默认级别,归属下列某一种
ISOLATION READ UNCOMMITTED    可以读取未提交数据
ISOLATION READ COMMITTED    只能读取已提交数据,解决脏读问题( Oracle默认级别)
ISOLATION REPEATABLE READ是否读取其他事务提交修改后的数据,解决不可重复读问题( MySQL默认级别)
ISOLATION SERIALIZABLE是否读取其他事务提交添加后的数据,解决幻影读问题
事务的传播行为

REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)

MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常

REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。

NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

NEVER:以非事务方式运行,如果当前存在事务,抛出异常

NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。

 

你可能感兴趣的:(Spring篇)