目录
2、Spring,Spring MVC,Spring Boot 之间什么关系?
1、Spring是什么?
spring是轻量级Java框架,有两个核心特性:IoC(控制反转)和AOP(面向切面编程)
spring是一个容器,管理对象的生命周期和对象与对象间的关系
2、Spring,Spring MVC,Spring Boot 之间什么关系?
Spring MVC是Spring框架的一部分,用于构建模型(Model)-视图(View)-控制器(Controller)模式的Web应用程序。核心思想是将业务逻辑、数据、显示分离
Spring Boot是简化Spring开发(减少配置文件,快速启动功能)
Spring的核心功能为Spring MVC,Spring Boot提供了基础
3、谈谈对IoC的理解?
IoC(控制反转)是一种设计思想,IoC思想是将原本在程序中手动创建对象的控制权交给Spring框架来管理。将对象之间的相互依赖关系交给IoC容器来管理,并且让IoC容器完成注入。
IoC容器实际上是一个HashMap集合(),存储所有的Bean。spring通过DI(数据注入)实现IOC。
IoC的三种注入方式:构造方法注入、setter方法注入(属性注入)、接口注入(已废弃)
IoC的实现原理是工厂模式和反射机制
4、谈谈对AOP的理解?
AOP(面向切面编程)是将与业务无关的,但是被业务模块共同调用的逻辑和责任封装成一个可重用的模块,来减少系统的重复代码,降低模块间的耦合。
AOP实现的关键是代理模式,AOP代理分为静态代理和动态代理。AspectJ是静态代理,编译时增强。Spring AOP是动态代理,是运行时增强。
1、AOP的基本理念?
- 目标:需要被代理的类
- 连接点:目标对象所属类中定义的所有方法
- 切入点:被切面拦截/增强的连接点
- 通知/增强:所要增强或增加的功能
- 织入:将通知应用到目标对象,生成代理对象的过程动作
- 切面:切入点+通知
2、通知的类型
前置通知(Before):在连接点之前执行的通知
后置通知(After):在连接点退出的时候执行的通知
环绕通知(Around):
5、Spring的优缺点?
优点:
- 方便解耦,简化开发:将所有对象的创建和依赖关系的维护,都交给Spring容器管理
- AOP编程支持:可以实现日志和权限拦截功能
- 声明事务支持:通过配置完成对事务的管理,不需手动编程
- 方便测试、方便集成框架
缺点:
- Spring依赖反射,占用内存,影响性能
6、Bean的生命周期
Bean指被Ioc容器所管理的对象
- 实例化:启动Spring时,IoC容器为每一个Bean创建一个实例
- 属性赋值:Spring通过反射机制给Bean赋值
- 调用初始化方法
- Bean运行期
- 应用程序关闭:关闭IoC容器,处理配置了销毁方法的Bean
- 调用销毁方法:在IoC容器关闭之前调用它
7、Bean的作用域有哪些
单例模式(singleton):默认作用域,IoC容器中一个Bean只创建一个实例,Spring中的Bean都是默认单例的。适用无状态的bean(无状态:不会保存数据)
原型模式(prototype):每次获取都会创建一个新的Bean实例。适用有状态的bean(有状态:有数据存储功能)
请求作用域(request):为每一个HTTP请求创建一个实例,在请求完成以后,Bean会失效,会被垃圾回收器回收
会话作用域(session):为每一个HTTP会话创建一个实例,不同会话使用不同实例,该 bean 仅在当前 HTTP session 内有效。
8、Bean是线程安全的吗?
Bean是否线程安全,取决于作用域和状态
在单例模式下,Bean是无状态的这种情况下,Bean是线程安全的。Bean是有状态的,则存在线程安全问题
在原型模式下,每次获取都会创建一个新的Bean实例,不存在资源竞争问题,所以不存在线程安全问题
对于有状态单例Bean的线程安全问题解决办法:
- 在Bean中避免定义可变的成员变量
- 在类中定义一个ThreadLocal成员变量,将可变的成员变量保存在ThreadLocal中
9、Spring事务
事务是逻辑上的一组操作,要么都执行,要么都不执行
程序是否支持事务,首先取决于数据库。mysql数据库中innodb引擎是支持事务的,myisam不支持
1、事务的特性
原子性:确保动作要么全部完成,要么都不起作用
一致性:执行事务后,数据保持不变
隔离性:并发访问数据库时,一个用户的事务不被其他干扰,各并发事务之间的数据库是独立的
持久性:事务被提交后,对数据库中数据的改变是持久的
只有保证了事务的原子性、隔离性、持久性之后,一致性才能保障
2、Spring支持两种方式的事务管理(事务实现方式)
编程式事务管理:不推荐使用,通过TransactionTemplate或者TransactionManger手动管理事务
声明式事务管理:利用注解或者xml配置,将事务和业务分离,(@Transactional 注解进行事务管理)
3、Spring事务的传播行为
10、Spring的设计模式
单例模式:Bean默认为单例模式
工厂模式:通过BeanFactory和ApplicationContext创建Bean对象
代理模式:AOP使用JDK的动态代理模式
观察者模式
适配器模式
装饰者模式