spring基础 ioc aop jdbctemplate spring事务

spring ioc

spring 可以通过编写xml文件的方式将对象放入spring的ioc容器中进行管理; 后期优化的可以通过注解的方式放入spring ioc容器中 比如: @compment @mapper @controller 等

2. spring ioc 

ioc 控制反转 反转控制  底层运用的技术:1 xml文件解析 2 工厂模式 3 反射 

ioc底层就是容器,容器就是创建对象的这些工厂;

两种实现:

1. BeanFactory :IOC容器基本实现,是spring内部使用的接口, 不建议开发人员使用; 加载配置文件时不会创建对象,在使用对象时才会创建

2. ApplicationContext:是BeanFactory的子接口,比BeanFactory提供了更多更强大的功能,面向开发人员使用; ApplicationContext 两个重要的实现类: ClassPassApplicationContext SystemFileApplicationContext

ioc操作 bean管理:

1. ioc 创建对象

2. ioc 属性注入

bean管理两种方式: xml文件  注解方式

bean管理xml方式:

基于xml方式创建对象: 默认会调用类的无参构造器,如果该类没有无参构造器 会报错; 基于xml方式注入属性: DI 就是注入属性的意思; 可以通过 set方法注入,可以通过 有参构造器注入;

P名称空间注入(使用很少) 可以简化xml配置; p名称空间注入底层还是set注入;

属性注入:特殊字面量:

1 null  2 包含特殊符号的值   

属性注入:外部bean

属性注入:内部bean

注入属性:级联赋值 

与注入外部bean是一样的

注入属性:集合类型属性(数组\list\set\map)

设置集合元素是对象:

将list 作为公共部分提取:

在spring中引入命名空间:util

使用命名空间util完成抽取:

ioc之FactoryBean

普通bea: 在xml文件中定义的类型和返回的一样

FactoryBean:在xml文件中定义的类型和返回的可以不一样

FactoryBean: 类需要实现FactoryBean接口

ioc bean的作用域:

1. 设置bean 是单实例还是多实例  默认情况下是单实例  通过设置 scope属性值: singleton 单实例   prototype:多实例    request(一次请求) 和 session(一次对话) 基本不用

ioc bean的生命周期:

生命周期: 从对象创建到对象销毁的过程  包括以下五步骤: 初始化方法和销毁方法需要配置

1 通过构造器创建bean实例

2 给属性赋值

3 调用bean的初始化方法

4 bean可以使用

5 调用bean的销毁方法

类如果实现了 BeanPostProcessor 就会给ioc加上后置处理器  ioc中所有 bean的生命周期变为七步骤:

1 通过构造器创建bean实例

2 给属性赋值

3 把bean实例传递给后置处理器

4 调用bean的初始化方法

5 把bean实例传递给后置处理器

6 bean可以使用

7 调用bean的销毁方法

ioc 基于xml方式自动装配:

自动装配: 根据指定的装配规则(属性名称或者属性类型), spring自动将匹配的属性值 赋值  可以通过bean标签中的 autowire属性配置  byName:根据属性名称注入   byType:根据类型注入

ioc操作 xml引入外部文件

1 需要引入context 名称空间

2 在spring中使用标签引入配置文件

3 通过 表达式获取

bean基于注解方式 对象创建 注入属性

什么是注解:

1. 注解式代码特殊标记,格式: @注解名称(属性名称=属性值,属性名称=属性值)

2. 注解使用的位置  类  方法  属性 上;

3. 使用注解的目的:简化xml配置;

spring针对bean管理提供的注解:注解方式创建 ioc对象

1 controller 2 service 3 repository 4 component  以上四个注解功能相同  为了开发人员方便,spring将其设置不同命名;

使用方式:

1. 开启组件扫描  可以通过设置可以设定 包下面扫描的对象

2. 在类上添加注解

spring针对bean管理提供的注解:注解方式对 ioc对象进行  属性注入

1 @Autowired(根据属性类型进行自动装配)  2 @Qualifier(根据属性的名称进行注入)  3 @Resource(可以根据类型注入  也可以根据名称进行注入  不是spring的注解 是javax包中的注解)  4 @value(注入普通类型属性)

spring 使用注解类 代替xml配置文件(完全注解开发)

1 创建配置类代替 xml配置文件  类上加@Configuration 该类就变成了配置类;  可以通过@ComponentScan  指定扫描范围;

2 获取全局上下文的方式和之前不同:

spring aop

aop:面向切面编程;  目的是降低耦合度,提高可重用性;  通俗描述: 在不修改主干代码的基础上,添加新的功能;

aop底层原理:动态代理   jdk动态代理(主干代码  有接口)和cglib动态代理(主干代码 没有接口)

jdk动态代理:

cglib:

jdk动态代理:

可以通过  java.long.reflect 的 Proxy.class 的newProxyInstance 方法 创建代理对象

spring 底层对这两种方式进行的了封装  开发人员在使用的时候简便很多;

aop术语:

1 连接点: 可以被通知增强的 方法

2 切入点:实际被增强的 方法

3 通知:实际增加的逻辑  通知分类  环绕通知\前置通知\返回通知\异常通知\后置通知

4 切面:把通知应用到切入点的 过程

aop操作:

spring 一般是基于 AspectJ实现aop操作

AspectJ是独立框架,一般在spring中实现 aop都借用 AspectJ

具体实现方式也是两种: 1  xml文件  2 注解(实际开发中使用多)

切入点表达式:

xml文件方式实现(实际项目中基本不用):

1 在xml文件中 创建被增强类和增强类的对象

2 配置aop增强

注解方式实现:

1. 确定被增强类

2. 编写增强类和增强方法

3. 进行通知的配置  (1) 开启注解扫描  (2) 将被增强类和增强类都放入spring的ioc中 (3) 在增强类上加注解 @Aspect (4) 在spring的配置文件中 开启生成代理对象 (5) 开始配置通知

完全注解开发(生产中使用):

在增强类中 对作为通知的方法上 添加 @Before @After @AfterReturning @AfterThrowing @Around @等通知注解 同时定义通知注解的  value属性(切入点表达式)

这样调用 被增强类 切入点的逻辑 就会执行到增强类的 通知;

切入点抽取:

多个增强类 对同一个切入点进行增强可以设置 增强类的优先级: 在增强类上添加注解 @Order  其属性值越小 越优先 比如@Order(1)  比 @Order(3) 先执行;

spring jdbcTemplate:

使用步骤:

1 在springioc 中创建 DataSource 对象

2 创建 jdbcTemplate对象并且给dateSource赋值

3 使用 创建service对象 调用 dao 在dao中注入jdbcTemplage 调用数据库

jdbc操作数据库:

jdbcTemplate操作数据库的写法:

spring 事务:

概念: 事务是数据库操作的基本单元,逻辑上的一组操作,要么全部成功,要么全部失败;

事务的四大特性: 原子性\一致性\隔离性\持久性   ACID

spring事务的实现方式:

1. 编程式 事务管理

2.  申明式 事务管理(项目中使用)  , 底层使用aop实现;

申明式 事务管理的实现:

(1) 基于注解方式使用(项目中使用)

(2) 基于xml 配置文件使用

spring事务基于注解方式使用:

1. 将DataSourceTransactionManager 放入spring的ioc容器中

2. 在spring xml配置文件中 引入tx名称空间

3. 开启事务的注解

4. 在需要事务管理的方法 或者 类上加 @Transactional注解

@Transactional注解 注解的属性

1. propagation:事务的传播行为,多事务方法之间进行调用 事务管理规则.   多事务方法:对数据库表数据进行变化的操作, 项目中使用前两种, 其他的了解.  默认值:required

2. isolation:事务的隔离级别: 多事务操作之间的影响级别; mybatis 默认第三隔离级别

隔离级别:读未提交   读已提交   可重复读   串行化

三个读的问题 或 现象:     脏读(问题)   不可重复读(现象)    幻读(现象)

3. timeout:事务的超时时间: 默认值 -1 表示不超时  单位是1

事务需要在一定时间内提交,如果不提交回滚

4. readOnly:是否只读:默认值false

如果设置为true 那么该事务中的方法只能查询,不能增删改了.

5. rollbackFor:回滚异常:默认值 Exception

出现哪些异常回滚

6. noRollbackFor:不回滚异常

出现哪些异常不回滚

spring事务基于xml方式使用(项目中一般不用xml方式):

1. 将DataSourceTransactionManager 放入spring的ioc容器中

2. 开启事务的注解

3. 配置通知 事务也是一种通知

4. 配置切入点和切面

事务操作 完全注解方式(项目中使用):

1. 创建配置类 代替xml配置文件  配置类:@Configuration  @ComponentScan  @EnableTransactionManagement  配置bean(将对象放入ioc容器中)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值