1.什么是 spring,你对 spring 的理解?
Spring是一个轻量级,非侵入式的(不使用框架特定的类,感受不到框架)IOC和AOP一站式的java后端开发框架,简化企业开发。
2.spring 的优缺点
优点:
Spring是一个容器,可以管理对象(IOC);
创建对象和使用对象分离,降低耦合度;
使用AOP思想可以更加方便地扩展功能;
可以集成其他框架;
缺点:
配置繁琐
依赖jar太多
3.解释一下 IOC 和 AOP
IOC:
控制反转(Inverse of Control),将创建对象的权利反转给Spring框架,使用对象时,只需要从Spring容器中获取,不用关系创建过程。
AOP:
面向切面编程(Aspect Oriented Programming), 将程序中的非业务代码抽取,使非业务代码与业务代码相隔离,为目标类创建一个代理对象让代理对象调用目标类中的方法也就是非业务代码,提高了代码的复用率和灵活性,提高开发效率,降低了非业务代码与业务代码的耦合性。 应用场景:保存日志,权限管理,统一异常处理 ,事务管理。
4.IOC 和 DI 的区别是什么
IOC是一种设计思想,将对象的创建和组装交给容器管理;
DI是IOC的具体实现,通过依赖注入的方式实现对象之间的解耦,依赖注入可以通过构造函数、setter 方法或字段注入的方式实现。
spring框架:简介+依赖注入-CSDN博客
有详细举例
5.spring 中注入对象的方式
XML配置文件
注解标签
6.自动注入的注解有哪些注解
- @Autowired:由 Spring 提供
- @Qualifier: 当有多个同一类型的 Bean 时,可以用@Qualifier(“name”)来指定。与@Autowired 配合使用.
- @Resource:由 jdk提供
7.Springc 中的 bean 和 new 的对象由什么区别
bean是将对象的管理权限交给了Spring容器,而new对象是创建新的对象,需要手动管理其生命周期和依赖关系。
8.AOP 中的术语有哪些,通知有哪些
- 连接点(Joinpoint):类中可以被增强的方法(新增修改等);
- 切入点(pointcut):实际被增强的方法;
- 通知(Advice): 一个切面在特定的连接点要做的事情(方法被增强的功能),分为前置通知、后置通知、异常;
- 切面(Aspect):把通知添加到切入点的整个过程称为切面;
- 目标(Target): 代理的目标对象(连接点,切入点所在类);
- 代理(Proxy): 向目标对象应用通知时创建的代理对象。
9.Spring 实现 AOP 有哪几种方式
XML配置
注入
spring:AOP面向切面编程+事务管理_aop切面方法事务-CSDN博客
详细内容见上文。
10.谈谈 Spring 事务管理,实现方式有几种,原理是什么?
编程式:
声明式:注解和XML配置
Spring 事务管理的原理是基于 AOP 技术和 JDBC 事务 API 实现的。当应用程序中的方法被标记为需要事务管理时,在方法执行前,Spring 会创建一个代理对象,并在代理对象中织入事务管理的逻辑。当方法执行时,代理对象会自动开启事务、执行业务逻辑、提交或回滚事务,并在方法执行后释放连接,保证了数据库操作的完整性和一致性。事务管理的实现依赖于底层的数据源和JDBC 驱动,可以支持不同的事务管理方式和隔离级别。
11.声明式事务哪些场景下会失效
- @Transactional 应用在非 public 修饰的方法上
- 异常被 catch 捕获导致失效
- 出现编译期异常
- @Transactional 事务传播行为设置错误
- 数据库引擎不支持事务
- 同一个类中,使用非代理对象调用一个有事务的方法,导致事务错误
12.SpringWEB(springMVC)运行流程
DispatcherServlet的工作原理:
- 请求接收:当客户端发送一个HTTP请求时,DispatcherServlet会创建一个请求对象,并从中获取请求的URL路径、HTTP方法、请求头等信息。
- 请求映射:DispatcherServlet会使用HandlerMapping实例来根据请求的URL路径和HTTP方法来匹配一个或多个Handler实例。HandlerMapping实例负责将URL路径和HTTP方法映射到具体的Handler实例上。
- 请求解析:当一个Handler实例被选中后,DispatcherServlet会调用HandlerAdapter实例来解析请求,获取请求的参数、请求头等信息。
- 业务处理:当请求被解析后,Handler实例会调用业务逻辑来处理请求。这个过程通常由Controller类中的方法来完成。
- 视图渲染:当业务逻辑处理完成后,Handler实例会调用ViewResolver实例来选择一个合适的视图来生成HTTP响应。ViewResolver实例负责将业务逻辑的结果转化为HTML、XML等格式的视图内容。
- 响应生成:当视图被选择后,Handler实例会调用View类中的render方法来生成HTTP响应。这个过程通常包括设置响应头、生成响应内容等操作。
- 响应发送:当HTTP响应生成完成后,DispatcherServlet会将响应发送给客户端。这个过程通常由Servlet容器来完成。
13.spring 和 springboot 的关系区别
SpringBoot是Spring的升级,简化Spring框架的搭建;SpringBoot的核心是:起步依赖,自动装配。