Spring框架
-
概念
- 轻量化的开源框架,提高开发效率.
-
重要功能
- 依赖注入,控制翻转:Bean交由Spring管理,实现了松耦合
- AOP:面向切面编程,减少耦合,在某种场景添加功能,例如日志或者监控之内的内容,可以在侵入量很少的情况下加入新功能.
-
Spring事务
- 编程式事务(一般不用)
- 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
- 声明式事务,通过配置文件或者注解配置(推荐使用)
- 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
- 隔离等级
- 默认 使用后端数据源默认的隔离等级,Mysql 为可重复读取 Oracle 为读取已提交.
- 读取未提交
- 读取已提交
- 可重复读取
- 串行化
- 编程式事务(一般不用)
-
Spring事务传播行为
- 支持当前事务的情况
- REQUIRED 要求有事务,没有则创建
- SUPPORTS 支持当前事务,有则加入,无则无事务运行
- MANDATORY 强制当前有事务,没有则报错
- 不支持当前事务的情况
- REQUIRED_NEW 创建一个新的事务并加入,当前事务挂起
- NOT_SUPPORTED 不支持事务,如果有事务,则挂起当前事务
- NEVER 不接受事务,有则报错
- 其他情况:
- NESTED 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED
- 支持当前事务的情况
-
面试题
- 谈谈自己对于 Spring IoC 和 AOP 的理解
- IoC(Inverse of Control:控制反转)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spring 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。
- 将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
- AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
- Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。
- Controller是多例还是单例
- 单例,不定义成员变量的时候是线程安全的
- Spring框架用了那些设计模式
- 工厂模式:生产bean
- 代理模式:AOP
- 单例模式:Controller单例
- 模版方法模式:jdbcTemplate,redisTemplate
- @Autowired @Resource @Qualifier的异同
- @Autowired是byType的 注入 如果有多个同类型的Bean就需要用到@Qualifier
- @Autowired+@Qualifier=@Resource
- @Resource 默认按照ByName自动注入。
- 谈谈自己对于 Spring IoC 和 AOP 的理解