IOC(控制反转)
削减代码间的耦合
控制对象的创建和销毁;将对象的控制权交给IOC容器
底层原理
- xml解析、工厂模式、反射
- IOC容器底层就是对象工厂,反射机制实例化对象
- IOC实现的两个接口
- BeanFactory:spring内部使用的接口,在加载配置文件的时候,不会创建对象;使用的时候才去创建对象
- ApplicationContext:BeanFactory接口的子接口,面向开发使用,功能更多,在加载配置文件的时候,就已经创建对象了。通过classPathXmlApplicationContext加载xml,用getBean()方法去获取实例化对象。
Bean标签详解
bean的作用:用于配置对象让spring来创建,默认情况是调用类的无参构造
- id bean的唯一标志名称
- class 实现类的全限定名称
- name bean的名称
- scope 指定对象的作用范围
- 单例 所有请求都用同一个对象来处理,内存地址相同
- 多例 每个请求用一个新的对象来处理,内存地址不同
- request/response 将对象存到request/response
- session
bean的生命周期
- 被创建 执行一次init()
- 提供服务,servlet的doGet()、doPost()方法,执行多次
- 被销毁 当servlet服务器正常关闭时,执行一次destory方法(单例)
AOP 面向切面
spring提供面向切面的编程,可以方便的实现对程序进行权限拦截、运行监控等功能
动态代理
JDK动态代理:基于接口的动态代理技术;
cglib代理:基于父类的动态代理技术;
aop相关概念
- target(目标对象):代理的目标对象
- proxy(代理):一个类被aop织入增强后,就产生一个结果代理类
- joinpoint(连接点):那些被拦截的点
- pointcut(切入点):我们要对哪些连接点进行拦截的定义
- advice(增强/通知):拦截到连接到之后要做的事情就是通知
- aspect(切面):切入点和通知的结合
- 织入:就是讲切点和通知加入代理对象,给aop配置的过程就是织入的过程
@Aspect //注解是一个切面
消息通知:
- before(""),前置通知
- afterReturning,后置通知
- around,环绕通知
- afterThrowing,异常抛出表达式
- after,最终表达式
事务
编程式事务管理
- platformTransactionManager:spring的事务管理器,接口,不同的dao技术使用不同的事务管理类
- TransactionDefinition:事务的定义对象
-
事务的隔离级别 isolation(默认级别、读未提交、读已提交、可重复读、串行读)
-
事务的传播行为 propagation
- required 默认值,要是调用的方法有事务,加入当前事务,要是没有就新建一个事务
- supports 要是调用的方法有事务,就使用,没有的话就开始无事务模式
- mandatory 要是调用的方法没有事务就报错
- required_new 新建事务,要是存在旧的事务,就挂起旧的
- not_supports:使用无事务模式,挂起存在的事务
- never,无事务模式,要是有事务,就报错
- nested 如果当前存在事务,在嵌套事务中执行,要是没有就执行required操作
-
获得超时时间
-
获得是否可读
-
- transactionStatus 事务状态
声明式事务
声明式事务的底层就是aop
@Transactional