Spring

Spring是什么?

Spring是轻量级 Java 开发框架,支持IoC(Inversion of Control:控制反转) 和 AOP(Aspect-Oriented Programming,核心思想是达到开箱即用,整合了各种技术模块,不需要重复造轮子。

Spring框架架构

  1. 核心容器
  2. AOP,Aspects 面向切面编程
  3. 数据访问/集成
  4. 事务
  5. Spring Web
  6. Spring test

IOC

什么是IOC?

IOC(控制反转):意思在程序中不主动new对象,转换为外部主动提供对象,将对象创建控制权由程序转移到外部这种思想叫控制反转。

IOC实现方法

  • Spring提供一个IOC容器(外部)来管理对象的创建与初始化。
  • 容器中的对象统称为Bean。

DI(依赖注入)

  • 在容器中建立bean和bean之间的依赖关系。如下图中的service运行依赖Dao方法,则会一起生成相关bean。

使用IOC和DI的目的?

  • 对代码充分解耦,由外部来生成对应的bean,并调用相对的方法
  • 使用对象时直接从IOC容器中获取bean,并且绑定了相对应的依赖关系

Spring中Bean 的三种实例化方式(默认单例模式)

  • 利用反射调用无参构造器创造对象
  • 使用静态工厂实例化bean
  • 使用实例工程实例化bean
  • 使用FactoryBean<T> 来实例化bean(实用)

Bean的生命周期

  • 初始化容器

    1. 创建对象(内存分配)
    2. 执行构造器
    3. 执行属性注入
    4. 执行bean的初始化方法
  • 使用bean

    1. 干活,执行业务
  • 关闭容器/销毁容器

    1. 执行bean的销毁方法(容器关闭前)

bean生命周期的控制

  • xml配置

    1. init-method(在bean中自定义的方法)
    2. destroy-method(在bean中自定义的方法)
  • bean接口(重写对应的方法)

    1. InitializingBean
    2. DisposableBean
  • 关闭容器

    1. close()暴力关闭不推荐
    2. registerShutdownHook 温柔关闭

 bean中的属性注入方法(使用xml)

  • setter注入

    • bean中要提供set方法
  • 构造器注入

    • bean中提供对应构造器
  • 自动装配

    • bean中要提供set方法
  • 集合注入

    • bean中要提供set方法

 例子:管理第三方bean的druid数据源

 创建IOC容器 

获取bean

容器类层次结构

 Bean注解开发模式(重点)

  •  Spring3.0开启了纯注解开发模式,利用Java类代替了核心xml文档。
  • 容器对象的获取也变为AnnotationConfigApplicationContext类

申明一个类为Bean的注解

@Bean 主要是引用第三方类库中的类引用到Spring使用的,主要用于方法的返回实例,如druid数据源导入

申明一个类为核心文档类 @Configuration

bean生命周期的注解

  • @PostConstruct(实例化后)
  • @PreDestory(销毁前)

依赖注入注解

  • @Autoware 的注入方式默认时by type,底层应用了反射,因此bean中不用提供set方法了
  • @Qualifier 当该接口有多个实现类的时候可以使用by name注入。
  • @value(${ })可以对简单类型值进行注入,配合@PorpertyRsource({“文件名”})使用

xml和注解模式总结

Spring Aop(面向切面编程)

Aop:面向切面编程,在不惊动代码原始基础功能的条件下,对其追加额外的功能。

应用场景:对方法传入的参数格式进行验证加修改,注解开发的底层就是AOP原理

Aop的核心概念

  • 连接点:程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
    • 在Spring aop 中为方法的执行
  • 切入点:匹配连接点的位置
    • 在Spring Aop 中一个切入点可以描述为一个具体的方法或者匹配多个方法
  • 通知:在切入点执行的操作,也就是共性功能,主要以方法的形式呈现
  • 通知类:定义通知方法的类
  • 切面:描述通知与切入点的对应关系

Aop应用的相关注解

  • @Aspect 声明该类为通知类,需要启用Aop
  • @Pointcut(“execution(void 连接点方法)”) 绑定该连接点为切人点,定义一个切入点方法
    • 切入点正则表达式
  • @EnableAspectJAutoProxy 申明要进行Aop注解开发,调用@Aspect的类作用

  • @Before(前置通知):目标对象的方法调用之前触发
  • @After (后置通知):目标对象的方法调用之后触发
  • @AfterReturning(返回通知):目标对象的方法调用完成,在返回结果值之后触发
  • @AfterThrowing(异常通知) :目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值。
  • @Around (环绕通知):编程式控制目标对象的方法调用。环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至不调用目标对象的方法

相关依赖

Aop的工作流程(代理模式)

Spring 事务

Spring中事务的开启流程

1.给需要开启事务的类或者接口、方法前添加注解@Transactional 开启事务

2.根据不同数据源的平台设置对应的事务管理器

Spring中提供的管理事务的接口:PlatformTransactionManager

PlatformTransactionManager接口中的三个方法

 不同的平台对PlatformTransactionManager接口有不同的事务管理器实现类,如:JDBC(DataSourceTransactionManager)、Hibernate(HibernateTransactionManager),、JPA(JpaTransactionManager)

例子:在JDBC配置类中增加JDBC的事务管理器 

3.在Spring的配置文件中添加注解@EnableTransactionManagement开启注解式事务驱动,类似Aop注解的启动。

事务的相关属性

 事务的传播行为

通过枚举类Propagation来使用开启,在注解@Transactional中定义传播行为,例如:

@Transactional(propagation = Propagation.REQUIRED)

 SpringMVC

SpringMVC技术与Servlet技术功能相同,均属于web层开发技术,是一种表现层的框架技术

使用步骤一共四步

1.导入坐标

2.创建SpringMVC控制器(Controller类)

3.初始化MVC环境,类似Spring环境

4.初始化web容器,加载MVC配置类到容器,再设置拦截器

 MVC中数据请求与接受的相关注解

@RequestMapping:用于拦截指定的url的请求

@Enablewebmvc:功能强大,可以将json数据自动转换类型

@RequestBody:用于接受json数据,一般在post请求中接受数据

@RequestParam:用于接受url地址传参数,一般在get请求中接收参数

@ResponseBody:用于返回json数据,如果不加则默认返回url字符串(进行页面跳转)。
@DateTimeFormat(pattern = “xxx--xx--x”):接受时间类型参数

Rest风格

Rest是一种资源访问的风格,不是规范,是大伙儿一起默认的规则。

Rest优点

  • 书写简化
  • 隐藏了资源的访问行为,无法通过url判断行为

Rest相关注解(Spring提供)

@RestController:设置为RESTful风格,替代了@Controller和@ResponseBody两个注解

@Get/Put/Update/Delete Map:代替了@RequestMapping

SSM整合(Spring + SpringMVC + Mybatis)

  • 要熟悉每个注解的作用以及对应的模块。SSM一共两个容器,Spring和SpringMVC。
  • Mybatis和Jdbc为第三方库类,需要用@Bean和Import导入Spring容器中

  • Spring

    • SpringConfig  (第三方的bean要通过import导入类文件)

  • SpringMVC

    • SpringMVCConfig

    • ServletConfig

  • Mybatis

    • JdbcConfig

    • MybatisConfig

    • jdbc.properties

    • 事务的处理

全局异常处理

  1. 自定义异常类

    • 业务异常(BusinessException)

    • 系统异常(SystemException)

  2. 自定义异常编码

  3. 在需要的地方设置异常触发throw抛出异常,最好使用Aop进行设置

  4. 全局异常处理类拦截并处理异常

SpringMVC拦截器和过滤器

 拦截器与过滤器的区别

  • 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
  • 拦截内容不同:Filter对于所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强
    • MVC的访问在MVC容器初始化的时候配置的,如例子,就是访问所有路径。
  • 拦截器拦截的是controller的请求,filter拦截的包括html、js等静态请求的所有请求

 拦截器设置步骤

  1. 在Controller层创建一个拦截器功能类,对方法进行增强,继承接口HandlerInterceptor

  2. 定义一个配置类继承WebMvcConfigurationSupport,或者直接在MvcConfig中实现WebMvcConfigurer接口,然后实现addInterceptor方法。

SpringBoot整合SSM

  1. pom.xml文件配置必要的起步依赖(webmcv、jdbc、mabatis),和必要的资源坐标(druid)
  2. application.yaml文件中配置数据源、端口等信息
  3. 配置类(全部删除)最大的便利之处!!简化Spring配置
  4. dao设置@Mapper
  5. 测试类
  6. 页面放在static目录下,优化了原本MvcSupportConfig中的添加静态资源拦截器的步骤

  SpringBoot应用中常见技术

分页(整合MybatisPuls环境下)

  1. 创建MP分页连接器
  2. new个IPage对象,调用分页查询的api

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值