Spring 浅复习

Ioc思想基于IOC容器完成,IOC容器底层就是对象工厂

spring提供ioc容器实现两种方式 (两种接口)

  • BeanFactory:ioc容器基本实现是spring内部的使用接口 不提供开发人员进行使用 *加载配置文件的时候不会创建对象在获取对象使用才去创建对象
  • ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用*加载配置文件的时候就会把配置文件对象进行创建

ApplicationContext 子类对象

  • FileSystemXmlApplicationContext
  • ClassPathXmlApplicationContext

ioc操作bean管理

  • Bean管理指的是两个操作
  • 1.spring创建对象
  • 2.spring注入属性
  • Bean管理操作的两种方式
  • 1.基于xml配置文件方式
    — 在spring配置文件中标签里面添加对应属性就可以实现对象创建
    — 创建对象的时候使用无参构造创建对象
    — 基于xml方式注入属性
    - DI:依赖注入,就是注入属性
  • 2.基于注解方式实现
    — set方法注入
    — 有参构造参数注入

ioc操作bean管理(FactoryBean)
1.spring有两种bean,一种是普通bean 一种是工厂bean FactoryBean
2.普通bean:在配置文件中定义bean类型就是返回类型
3.工厂bean:在配置文件定义bean类型可以和返回类型不一样

bean 作用域:
1.在spring里面设置创建bean实力是单实例或者多实例

  • 在spring 配置文件bean标签里面有属性 用于设置单实例 还是多实例
  • 第一个值singleton表示单实例对象
  • 第二个值prototype 表示是多实例对象
  • request
  • session
    生命周期:
  • 从对象创建到对象销毁的过程
    bean的生命周期:
    1 通过构造器创建bean实例 无参数构造
    2 为bean的属性初始值和对其他bean引用 调用set方法
    3 调用bean的初始化的方法需要进行配置
    4 bean可以使用 对象获取到了
    5 当容器关闭时候 调用bean的销毁的方法
    Autowire:
    byName:根据属性名称注入,注入值baen的id值和各属性名称一样
    byType:根据属性类型注入

bean 管理指的是两个操作

  • spring创建对象
  • spring注入属性
    bean 管理操作的两种方式:
  • 基于xml配置文件方式实现
  • 基于注解方式实现

spring 针对bean 管理中创建对象提供注解

  • Controller
  • Service
  • Component
  • Repository
    上面四个注解都能创建bean实例

基于注解方式实现对象创建

1 引入依赖
2 开启组建扫描
3 创建类在类上面添加创建对象注解

常见注入属性注解:
@autowired 根据属性类型进行注入
@Qualifier 根据属性名称进行注入 必须搭配 @autowired 使用。
@Resource 可以根据类型注入 可以根据名称注入
@Value 注入普通类型属性

完全注解开发:
1 创建配置类 替代xml配置文件

  • @configuration
  • @comonentScan

AOP
面向切面编程, 利用aop可以对业务逻辑的各个部分进行隔离 从而使得业务逻辑个部分之间的耦合度降低提高程序的可重用性 同时提高开发效率

不改变原代码添加新的功能。即事aop

aop底层使用动态代理
两种情况

  • 有接口情况 使用jdk动态代理
    1 创建类接口实现类代理对象,通过代理对象增强类中方法
  • 没有接口的情况 使用CGLIB动态代理
    1 创建当前类子类的代理对象 增强类的方法

aop术语:

1 连接点:类里面哪些方法可以被增强,这些称为连接点
2 切入点:实际被增强的方法被称为切入点
3 通知:实际增强的部分就称为通知或者叫增强
通知有多种类型:

  • 前置通知
  • 后置通知
  • 环绕通知
  • 异常通知
  • 最终通知

4 切面:是动作,把通知应用到切入点过程

aop操作:
1 spring一般是基于AspectJ实现aop操作
AspectJ不是spring的组成部分 是独立的aop框架 一般吧AspectJ跟spring框架一起使用操作aop
2 基于AspectJ实现aop操作

  • 基于xml配置操作
  • 基于注解方式实现

切入点表达式:
1 切入点表达式作用:知道哪个类里面的哪个方法进行增强
execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))
举例:对co m.xx.dao.xx 里面的add方法进行增强
execution(* co m.xx.dao.xx.add(…))

2 对co m.xx.dao.xx 里面 所有的方法进行增强
execution(* co m.xx.dao.xx.(…))
3 对co m.xx.dao里面 所有的方法进行增强
execution(
co m.xx.dao.xx.. (…))

进行通知的配置:
1 在spring配置文件中开启注解扫描
2 使用注解创建增强类跟被增强类的对象 +@Component
3 在增强类上添加@Aspect
4 在spring中配置文件中开启生成代理对象
5 在增强类里面在作为通知的方法上面添加通知类型的注解 使用切入点表达式配置

配置不同类型的通知:

@Before
@after
@afterReturning。返回值返回之后执行。返回通知
@afterThrowing 异常通知。有异常才会执行。没异常不会执行
@Around

相同切入点可以使用@Pointcut 抽取

多个增强类同时增强一个方法的时候可以设置增强的优先级

  • 在增强类上面添加@Order(数字类型)数字越小优先级越高

JDBCTemplate 略

事务:
事务四个特性ACID

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

事务 操作:

  • 事务添加到java三层结构的service中
  • 在spring中有编程式事务跟声明式事务

声明式事务有两种方式:

  • 注解
  • xml
    声明式事务 底层是使用aop原理

相关api:
提供一个接口 根据框架的不同提供不同的实现类

使用步骤:

  • 在spring配置文件中配置事务管理器
  • 在spring配置文件中开启事务注解 1 引入名称空间。2开启事务注解
  • 在service类或者方法里面添加@Transactional注解

事务传播行为:
当一个事务方法被另一个事务方法调用的时候这个事务方法如何运行:

  • REQUIEDS 如果有事务在运行,当前的这个方法就在这个事务内运行,否则就启动新的事务并在自己的事务内运行
    方法2会开启事务A,调用方法1则方法1会加入到当前事务A里面来
  • REQUIEDS_NEW. 当前的方法必须启动新事务并在它自己的事务内运行,如果有事务正在运行 则应该把它挂起
    方法A跟方法B互不影响;
  • SUPPORTS 如果有事务在运行,当前的方法就在这个事务内运行 否则它可以不运行在事务中
    如果方法A是SUPPORTS的方式。不走事务。方法B是REWUIREDS。方法B调用方法A 则方法A会加入事务

ioslation:事务隔离级别:

  • 事务有特性称为隔离性多事务操作之间不会产生影响,不考虑隔离性会产生很多问题
  • 有三个问题:脏读 ,不可重复读,幻读
    脏读:一个未提交事务读取到另一个未提交事务的数据
    不可重复读:一个未提交事务读取到另一个已提交事务的修改的数据
    幻读:一个未提交事务读取到另一提交事务添加数据

设置隔离级别可以处理上面事务问题:
脏读。 不可重复读。 幻读。
读未提交 有。 有 有
读以提交 无 有 有
可重复读 无。 无。 有。 mysql默认这个级别
串行化 无 无 无

超时时间 timeout。 事务需要在一定的时间内提交 如果不提交则会滚。 默认值是-1设置以秒为单位进行计算
是否只读 readOnly。默认值为false。
回滚。rollbackFor 设置某些异常 会滚
不回滚。noRollbackFor

你可能感兴趣的:(spring,java,后端)