131.简述一下IOC容器对BEAN的生命周期?
- 通过构造器或工厂方法创建 Bean 实例
- 为Bean 的属性设置值和对其他 Bean 的引用
- 将Bean 实 例 传 递 给 Bean 后 置 处 理 器 的 postProcessBeforeInitialization 方法
- 调用 Bean 的初始化方法(init-method)
- 将 Bean 实 例 传 递 给 Bean 后 置 处 理 器 的 postProcessAfterInitialization 方法
- Bean 可以使用了
- 当容器关闭时, 调用 Bean 的销毁方法(destroy-method)
132.在Spring中AOP的使用场景有哪些?
- 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
- 主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业 务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务 逻辑的方法中,进而改 变这些行为的时候不影响业务逻辑的代码。
133.Spring支持的事务管理类型
Spring支持两种类型的事务管理:
- 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
- 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。
134.Spring分布式事务如何处理的
- 第一种方案:可靠消息最终一致性,需要业务系统结合 MQ消息中间件实现,在实现过程中需要保证消息的成功发送及成功消费。即需要通过业务系统控制 MQ的消息状态;
- 第二种方案:TCC补偿性,分为三个阶段 TRYING-CONFIRMING-CANCELING。每个阶段做不同的处理。
- TRYING阶段主要是对业务系统进行检测及资源预留
- CONFIRMING阶段是做业务提交,通过 TRYING阶段执行成功后,再执行该阶段。默认如果 TRYING阶段执行成功,CONFIRMING就一定能成功。
- CANCELING阶段是回对业务做回滚,在 TRYING阶段中,如果存在分支事务 TRYING失败,则需要调用 CANCELING将已预留的资源进行释放
135.什么是SpringBoot
Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目。大多数SpringBoot项目只需要很少的配置文件。
136.SpringBoot核心功能
- 独立运行Spring项目:Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
- 内嵌servlet容器:Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
- 提供starter简化Maven配置: spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入如图5-1所示的依赖包。
- 自动装配Spring:SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。
- 准生产的应用监控:SpringBoot提供基于http ssh telnet对运行时的项目进行监控。
- 无代码生产和xml配置:SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。
137.SpringBoot优缺点
- 优点:
- 快速构建项目。
- 对主流开发框架的无配置集成。
- 项目可独立运行,无须外部依赖Servlet容器。
- 提供运行时的应用监控。
- 极大的提高了开发、部署效率。
- 与云计算的天然集成。
- 缺点:
- 如果你不认同spring框架,也许这就是缺点。
138.SpringBoot特性
- 创建独立的Spring项目
- 内置Tomcat和Jetty容器
- 提供一个starter POMs来简化Maven配置
- 提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
- 完全没有代码生成和xml配置文件
139.SpringBoot CLI
SpringBoot CLI 是SpringBoot提供的控制台命令工具。
140.SpringBoot maven构建项目
spring-boot-starter-parent:是一个特殊Start,它用来提供相关的Maven依赖项,使用它之后,常用的包依赖可以省去version标签。