代码编织梦想

在这里插入图片描述

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 方法都将具有同样类型的事务属性
    • 类中的方法上

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35414977/article/details/127992372

细说spring——aop详解(aop概览)_jivan2233的博客-爱代码爱编程_springaop

一、对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护

架构师必须掌握的知识——spring容器扩展点-爱代码爱编程

架构师必须掌握的知识——spring容器扩展点 写作意图 spring作为目前最为主流的框架,能掌握它的各个知识点是必不可少的技能,有些知识在业务代码中不经常使用,但在框架开发时会经常用到。这篇文章的知识就是如此,希望这

Spring知识点梳理——初识Spring-爱代码爱编程

1 Spring基础认识 1.1 Spring简介 2002年,interface21框架诞生2003年3月24号正式发布1.0Rod Johson,Spring Framework创始人SSH : Struct2 + Spring + HibernateSSM : SpringMvc + Spring + Mybatis1.2 优点 Spring是

微服务架构——Spring Boot——知识点讲解-爱代码爱编程

文章目录 一、依赖管理二、main类三、配置类四、Spring Beans和依赖注入五、Devtools 开发工具六、日志系统七、Spring Web MVC框架 说明:本文主要讲解Spring Boot的一些常用的配置的作用及其原理 一、依赖管理 依赖管理 Spring Boot每次发布时都会提供一个它所支持的精选依赖列表。实际上,在构建

Spring框架知识点总结【2020最新版】-爱代码爱编程

以下内容为学习Spring框架时所记的笔记,现在翻出来复习、整理一下分享出来,如果内容有需要修正的地方,欢迎各位在评论区指正,如果转载请附带原文地址表明出处,谢谢大家。 目录 Spring是什么?Spring由哪些模块组成?Spring的特点?Spring IOC容器的介绍IOC的思想IOC容器的概念Bean的概念Spring IOC

重学Spring框架系列之——什么是Spring框架-爱代码爱编程

说在前面 Spring框架算得上是java程序员必备的一项技能了。不论是早期的SSM或SSH架构,还是现在流行的SpringBoot加SpringCloud构建的分布式、微服务架构。Spring在其中扮演着不可或缺的角色,其重要性也是不言而喻的。 为了更好的工作和自身的提升,菜鸟又重新学习了一下Spring框架,在学习的过程中也有一些收获,从而想着通过

Spring知识点精简版梳理(一)——概述-爱代码爱编程

chapter01 - Spring概述 相关源代码:(创作不易,点个star呗,感谢🙏)https://github.com/MicahKong/spring_source_code Spring知识精简版梳理系列 chapter 01 – Spring概述https://blog.csdn.net/qq_35843514/article/deta

Spring知识点精简版梳理(三)—— Spring Beans-爱代码爱编程

chapter03 - Spring Beans 相关源代码:(创作不易,点个star呗,感谢🙏)https://github.com/MicahKong/spring_source_code Spring知识精简版梳理系列 chapter 01 – Spring概述https://blog.csdn.net/qq_35843514/article/

Spring知识点精简版梳理(四)—— Spring AOP-爱代码爱编程

Spring AOP(面向切面编程) 相关源代码:(创作不易,点个star呗,感谢🙏)https://github.com/MicahKong/spring_source_code Spring知识精简版梳理系列 chapter 01 – Spring概述https://blog.csdn.net/qq_35843514/article/detail

spring5框架知识点总结(一)IOC篇-爱代码爱编程

文章目录 spring5框架知识点总结(一)——IOC操作bean管理Spring5 框架概述IDEA中spring项目的创建IOC(概念和原理)IOC(BeanFactory 接口)IOC 操作 Bean 管理(概念)IOC 操作 Bean 管理(基于 xml 方式)xml 注入其他类型属性 spring5框架知识点总结(一)——IOC操作b

Spring知识点整理-爱代码爱编程

目录 Spring是什么? 对AOP的理解 解释一下Spring AOP里面的几个名词  Spring AOP 和AspectJ AOP有什么区别? JDK动态代理和CGLIB动态代理的区别 JavaConfig方式如何启用AOP ?如何强制使用cglib? 什么情况下AOP会失效,怎么解决? Spring的AOP是在哪里创建的动态代理?

Spring知识点总结 Spring基础到深入(持续更新)-爱代码爱编程

1. 概述 Spring是一个开源框架。 Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,而在Spring中却非常的优雅和简洁。[EJB是Enterprise Java Beans技术的简称, 又被称为企业Java Beans

七万字整理springcloud + cloudalibaba知识点总结笔记_扎哇太枣糕的博客-爱代码爱编程

  各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`

springboot如何避免sql注入漏洞呢?_qq_25073223的博客-爱代码爱编程

转自: SpringBoot如何避免SQL注入漏洞呢? 下文笔者讲述SpringBoot避免SQL注入漏洞的方法分享,如下所示 SQL盲注,SQL注入简介 SQL注入的风险: 数据库中的数据被任意查看,修改,删除 SQL注入的原因: 未对用户输入进行正确的验证 SQL注入如何避免 对危险字符进行过滤或sql参数化

spring——入门介绍(以版本5.2为例)_spring 5.2.25_代码星辰的博客-爱代码爱编程

目录 1.Spring框架概述2.Spring入门案例3.IoC介绍(1)IoC概述(2)IoC底层原理(3)IoC接口 4.IoC操作——Bean 管理(1)Bean 管理概述(2)Bean 管理——基

spring——事务注解@transactional【建议收藏】-爱代码爱编程

在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql,为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到事务;Spring框架下,我们经常会使用@Transactional注解来管理事务; 本篇介绍Spring的事务注解@Transactional相关的知识,包括事务简介、事务隔离级别、Sp

spring——异常处理器_工作中异常处理器类放在哪个位置-爱代码爱编程

异常处理器 程序开发中不可避免的会遇到异常现象。 前端接收到这个信息后和之前我们约定的格式不一致,这个问题该如何解决?出现异常的常见位置和常见诱因如下。 框架内部抛出的异常,因使用不合规导致。框架内部抛出的异常:因使