Spring —— spring 框架知识点简单整理

在这里插入图片描述

Spring

介绍

概述

  • 分层的 Java 一站式轻量级开源框架
  • 控制反转 (IoC)
  • 面向切面编程(AOP)

优点

  • 非侵入式设计
  • 降低耦合性,方便开发
  • 支持 AOP 编程
  • 支持声明式事务
  • 方便程序测试
  • 方便集成各种框架
  • 降低 JavaEE API 的使用难度

体系结构

  • 核心容器

    • Bean
    • Core
    • Context
    • SpEL
  • 数据访问及集成

    • JDBC
    • ORM
    • OXM
    • JMS
    • Transactions
  • Web

    • WebSocket
    • Servlet
    • Web
    • Portlet
  • 其他模块

    • AOP
    • Aspects
    • Instrumentation
    • Messaging
    • Test

Spring 5 新特性

  • 更新 JDK 基线
  • 修订核心框架
  • 更新核心容器
  • 支持响应式编程
  • 支持函数式 Web 框架
  • 支持 Kotlin
  • 提升测试功能

目录结构

  • docs

    • 开发指南,API 参考文档,…
  • libs

    • 开发所需的 JAR 包和源码
  • schema

    • 各种配置文件的 XML schema 文档
  • 外部依赖:commons.logging

控制反转与依赖注入

控制反转

  • 对象实例的控制权由应用代码转移到了 IoC 容器,控制权发生了反转。

依赖注入

  • IoC 容器在运行期间动态的将某种依赖资源注入到对象中。

  • 类型

    • 构造方法注入
    • 属性 setter 方法注入

IoC 容器

BeanFactory 接口

  • Spring 容器最基本的接口
  • 实现类:XmlBeanFactory

ApplicationContext 接口

  • 建立在 BeanFactory 接口基础之上

  • 额外功能:国际化,资源访问,事件传播

  • 可以为单例的 Bean 实行预初始化

  • 实现类

    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext
    • AnnotationConfigApplicationContext
    • WebApplicationContext
    • ConfigurableWebApplicationContext

Bean 的配置

  • 格式

    • XML
    • Properties
  • XML 配置

    • <beans>

      • <bean>

        • id

        • name

        • class

        • scope

        • factory-method

        • factory-bean

        • autowire

        • <constructor-arg>

          • index
          • type
          • ref | <ref>
          • value | <value>
        • <property>

          • name

          • ref

          • value

          • <list>

          • <set>

          • <map>

            • <entry>

              • key(字符串类型)
              • value-ref | <ref>
              • value | <value>
      • default-autowire

Bean 的实例化

  • 构造方法实例化
  • 静态工厂实例化
  • 实例工厂实例化

Bean 的作用域

  • singleton(默认)

    • 管理 Bean 的生命周期
  • prototype

  • request

  • session

  • global session

Bean 的装配方式

  • 基于 XML

    • 属性 setter 方法注入
    • 构造方法注入
  • 基于注解

    • 在配置文件 applicationContext.xml 中开启相应的注解处理器
    • @Component
    • @Controller
    • @Service
    • @Repository
    • @Scope
    • @Value
    • @Autowired
    • @Resource
    • @Qualifier
    • @PostConstruct
    • @PreDestroy
  • 自动装配

    • no(默认值)
    • default
    • byName
    • byType
    • constructor

Bean 的生命周期

  • 实例初始化后

  • 实例销毁前

  • 监控

    • XML 配置文件
    • 注解

AOP

介绍

  • 概述

    • 将程序中相同的业务逻辑进行横向切割,并将重复的业务逻辑抽取到一个独立的模块中,以达到提高程序可用性和开发效率的目的。
  • 术语

    • 切面(Aspect)

      • 用于横向插入系统的功能类
    • 连接点(Joinpoint)

      • 程序执行过程中某个特定的节点
    • 切入点(Pointcut)

      • 满足预先指定条件的连接点
    • 通知/增强处理(Advice)

      • 插入的切面程序代码,是切面的具体实现
    • 目标对象(Target)

      • 被插入切面的方法
    • 织入(Weaving)

      • 将切面代码插入到目标对象上,从而生成代理对象的过程
    • 代理(Proxy)

      • 将通知应用到目标对象后,程序动态创建的通知对象
    • 引介(Introduction)

      • 一种特殊的通知,为目标对象添加一些属性和方法

实现机制

  • JDK 动态代理

    • java.lang.reflect.Proxy.newProxyInstance()
  • CGLib 动态代理

    • 不要求目标类实现接口
    • Spring 核心包已集成 CGLib 所需的包
    • org.springframework.cglib.proxy.Enhancer

基于 XML 的 AOP 实现

  • <aop:config>

    • id

    • ref

    • <aop:aspect>

      • pointcut
      • pointcut-ref
      • method
      • throwing
      • returning
    • <aop:advisor>

    • <aop:pointcut>

      • id

      • expression

        • execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
    • <aop:before>

    • <aop:after>

    • <aop:around>

    • <aop:after-returning>

    • <aop:after-throwing>

基于注解的 AOP 实现

  • @Aspect
  • @Pointcut
  • @Before
  • @After
  • @Around
  • @AfterReturning
  • @AfterThrowing
  • 开启 @aspectj 的自动代理支持

注意

  • 相关依赖

    • aspectjrt
    • aspectjweaver
  • JoinPoint 接口实例作为参数来获得目标对象的类名和目标方法名

  • ProceedingJoinPoint 接口实例作为参数来获得目标对象的目标方法参数

  • 环绕通知必须接收一个类型为 ProceedingJoinPoint 的参数,返回值也必须是 Object 类型,且必须抛出异常

JDBC

JdbcTemplate 概述

  • 模板类

  • 更高层次的抽象均在此之上

  • 继承:JdbcAccessor

    • DataSource

    • SQLExceptionTranslator(接口)

      • 负责对 SQLException 异常进行转译
  • 实现:JdbcOperations

JDBC 的配置

  • 模块

    • core
    • dataSource
    • object
    • support
  • 配置文件 applicationContext.xml 中

    • 配置数据源

      • org.springframework.jdbc.datasource.DriverManagerDataSource
    • 配置 JDBC 模板

      • org.springframework.jdbc.core.JdbcTemplate
    • 配置注入类

    • 注意

      • 配置 JdbcTemplate 时,需要将 dataSource 注入 JdbcTemplate 中
      • 其他需要使用 JdbcTemplate 的 Bean,也需要将 JdbcTemplate 注入该 Bean 中。
  • dataSource

    • driverClassName
    • url
    • username
    • password

JdbcTemplate 的常用方法

  • execute()
  • update()
  • query()

事务管理概述

  • 核心接口

    • 依赖包:spring-tx

    • PlatformTransactionManager

      • 用于管理事务

      • getTransaction()

      • commit()

      • rollback()

      • 实现类

        • DataSourceTransactionManager
    • TransactionDefinition

      • 定义事务描述相关的常量

      • 事务的隔离级别

        • 默认
        • 读—未提交(脏读,幻读,不可重复读)
        • 读—已提交(幻读,不可重复读)
        • 允许重复读(MySQL 默认隔离级别)
        • 事务串行执行
      • 事务的传播行为

      • 事务的超时时间

      • 是否为只读事务

      • 方法:获取事务的属性

    • TransactionStatus

      • isNewTransaction()
      • hasSavepoint()
      • isRollbackOnly()
      • setRollbackOnly()
      • isCompleted()
      • flush()
  • 事务管理的方式

    • 编程式

      • 通过编写代码实现的事务管理
    • 声明式

      • 通过 AOP 实现的事务管理
  • 相关依赖

    • aspectjweaver
    • aopalliance

声明式事务管理

  • XML 方式

    • 引入 tx 命名空间

    • <tx:advice>

      • id

      • transaction-manager

      • <tx:attributes>

        • <tx:method>

          • name
          • propagation
          • isolation
          • read-only
          • timeout
          • rollback-for
          • no-rollback-for
  • 注解方式

    • @Transactional

      • value
      • propgation
      • isolation
      • timeout
      • readonly
      • rollbackFor
      • rollbackForClassName
      • noRollbackFor
      • noRollbackForClassName
    • 类上

      • 该类的所有 public 方法都将具有同样类型的事务属性
    • 类中的方法上

      • 若类上也有该注解,屏蔽掉类上的
    • 注意:配置事务注解驱动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值