spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
AOP--面向切面编程:能够将那些与业务无关的,但为业务模块所共用的一些逻辑,如(事务管理,日志管理)封装起来,减少重复代码,降低耦合,并有利于未来的可扩展性和可维护性。
Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,Spring AOP就会使用JDK动态代理去创建代理对象;对于没有实现接口的对象,无法使用JDK动态代理,而去使用CGlib动态代理生成一个被代理对象的子类来作为代理。使用AOP可以将一些通用功能抽象出来,如日志管理、事务管理和权限管理等,使用时直接调用即可,避免代码重复。
ApplicationContext是BeanFactory的子接口,ApplicationContext提供了更完整的功能
区别
不是线程安全的,框架并没有对bean进行多线程的封装处理。 主要是因为:当多个线程操作同一个对象时,对这个对象的非静态变量成员的写会存在线程安全问题。
解决方法:
实现方式
事务的实现方式有两种:一种是编程式,一种是声明式,如使用@Transactional注解
原理 在一个方法上加了@Transactional注解之后,Spring基于这个类生成一个代理对象,将这个代理对象作为bean放入IOC容器,在调用代理对象方法时,如果方法存在@Transactional注解,那么代理兑奖事务的自动提交设置为false,再去执行原本的业务逻辑,如果没有异常,那么代理就会将事务提交,否则将事务回滚。
事务:是一个完整的业务逻辑,最小的工作单元,不可再分。要么同时执行成功,要么同时失败
事物的四个特性(ACID):
Spring中事物的隔离级别(四个)
事务传播⾏为是为了解决业务层⽅法之间互相调⽤的事务问题。当事务⽅法被另⼀个事务⽅法调⽤时,必须指定事务应该如何传播。
支持当前事务的情况:
不支持当前事务的情况:
其他情况
NESTED:如果当前存在事务,则创建⼀个事务作为当前事务的嵌套事务来运⾏;如果当前没有事务,则该取值等价于REQUIRED
五种
-END-