Spring相关面试题
Spring相关面试题
唐喜乐Spring IOC 和 AOP
- Spring IOC
Inverse of Control 控制反转,将原本在程序中手动创建对象的控制权交给Spring框架的进行管理,由**IOC容器完成对象的依赖注入(DI)**,ICO容器实际上就是个key-value形式的map。使对象间的耦合降低,资源更易于管理。 - Spring AOP
Aspect oriented programming 面向切面编程,基于动态代理,将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性
Spring Bean 的生命周期和作用域
生命周期:实例化 -> 属性赋值 -> 初始化 -> 销毁
1 | 1. 实例化:Spring 通过构造方法或工厂方法创建 Bean 实例。 |
作用域:
- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
- prototype : 每次请求都会创建一个新的 bean 实例。
- request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP- request 内有效。
- session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP- session 内有效。
- global-session : 全局 session 作用域,仅仅在基于 Portlet 的 web 应用中才有意义,Spring5 已经没有了。Portlet 是能够生成语义代码(例如:HTML)片段的小型 Java Web 插件。它们基于 portlet 容器,可以像 servlet 一样处理 HTTP 请求。但是,与 servlet 不同,每个 portlet 都有不同的会话
常用注解
Spring中常用的注解
- @Component :通用的注解,可标注任意类为 Spring 组件
- @ComponentScan:定义要扫描的路径,从中找出标识了需要装配的类自动装配到- Spring 的 bean 容器中
- @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作
- @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层
- @Autowired:Spring 内置的注解,默认的注入方式为byType,可以通过- @Qualifier 注解来指定名称
- @Resource:JDK 提供的注解,默认注入方式为 byName,有 name 和 type 两个属性
SpringMVC常用注解
- @Controller:声明MVC的控制层,主要用户接受用户请求并调用 Service 层返回数- 给前端页面
- @RestController:组合了@Controller和@ResponseBody,表明只进行数据交互
- @RequestMapping:用来映射Web请求的路径、参数、处理类的方法
- @RequestBody:用于获取请求体内容
- @ResponseBody:表明接收返回数据而非一个页面
- @RequestParam:请求数据绑定到某个简单对象
- @PathVariable:用于绑定 url 中的占位符
SpringMVC执行过程
- 浏览器请求过来,发送到DispatcherServlet前端控制器
- DispatcherServlet根据请求信息匹配对应的处理器映射器HandlerMapping,解请求对应的Handler
- 解析到对应Handler后,再由处理器适配器HandlerAdapter处理
- HandlerAdapter根据Handler调用真正的处理器(controller)处理相应的业务辑
- 处理完成后返回ModelAndView对象到前端控制器,Model是数据,View是逻辑view
- 前端控制器发送ModelAndView到视图解析器ViewResolve,解析后返回具体View
- 前端控制器对View进行视图渲染
- 最后前端控制器将视图返回给浏览器
spring的事物失效的场景
- 访问权限非public
- Bean没有被spring管理
- 方法被final修饰了
- 数据库不支持事务
- 同一类中方法的内部调用
- 未配置事务管理器
- 未正确地捕获异常
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果