- 什么是Spring?
Spring是一种轻量级的开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring的核心模块
Spring Core是基础模块,可以说Spring的其他功能都要依赖于该类库,主要提供IOC的依赖注入功能;
Spring Aspects:该模块为与Aspects的集成提供支出;
Spring Aop: 提供了面向切面的编程实现;
Spring JDBC:为Java的数据库连接模块;
Spring JMS:Java消息服务;
Spring ORM:用于支持ORM工具;
Spring Web:为创建Web应用提供支持;
Spring Tests:提供Junit和TestNG测试的支持。
- 什么是Spring的IOC?
IOC(控制反转)是一种设计思想,就是将原本在应用程序中创建对象的控制权交由Spring的管理。IOC容器是Spring用来实现控制反转的载体,IOC容器实际上就是一个Map,Map中存放了各种对象。
将对象之间的相互依赖交由Spring去管理,并由IOC容器完成对象的注入,这样可以很大程度上简化应用的开发。
- 什么是Spring的AOP?
AOP(面向切面编程)能够将那些与业务无关,却为业务模块所共有的逻辑或责任(比如事务管理、日志管理、权限控制)封装起来,便于减少重复代码,降低模块间的耦合度,并利于将来的可扩展性和可维护性。
- Spring 中的 bean 的作⽤域有哪些?
- Singleton (单例):唯一的bean实例,Spring中的bean默认都是单例的;
- Prototype: 每次请求都是创建一个新的bean实例;
- Request: 每次http请求都会产生一个bean,该bean在当前http request内有效;
- Session: 每次http请求都会产生一个bean,该bean在当前http Session内有效;
- Global-session: 全局session作用域,仅仅在基于protlet的web应用中才有意义,Spring5已经没有了。
- Spring 的事务传播机制?
- required: 如果当前存在事务,则加入该事务;如果不存在事务,就新开启一个事务,默认的事务传播机制。
- supports: 如果当前存在事务,则加入该事务;如果不存在事务,就以非事务的方式运行。
- mandatory: 如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。
- required_new: 创建一个新的事物,如果当前存在事务,就把当前事物挂起。
- not_supports: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。
- never: 以非事务方式运行,如果当前存在事务,则抛出异常。
- nested: 如果当前存在事务,则创建⼀个事务,作为当前事务的嵌套事务来运⾏;如果当前没有事务,则该取值等价于required.
- Spring中bean的生命周期?
- 解析类得到BeanDefinition;
- 如果类有多个构造方法,推断类的构造方法;
- 确定构造方法,进行实例化得到一个对象;
- 对于对象中的属性进行依赖注入;
- 回掉Aware方法;
- 执行BeanPostProcesses的前置化方法;
- 调用初始化方法;
- 执行BeanPostProcesses的后置化方法;在这里进行AOP
- 如果当前Bean是单例的,则放入单例Map池中;
- 使用Bean;
- Spring容器关闭时候调用DisposableBean的destroy()方法;