Spring/SpingMVC常见问题总结


目录

  1. 为什么要使用 spring?
  2. 解释一下什么是 aop?
  3. 解释一下什么是 ioc?
  4. spring 有哪些主要模块?
  5. spring 常用的注入方式有哪些?
  6. spring 中的 bean 是线程安全的吗?
  7. spring 支持几种 bean 的作用域?
  8. spring 自动装配 bean 有哪些方式?
  9. spring 事务实现方式有哪些?
  10. 说一下 spring 的事务隔离?
  11. 说一下 spring mvc 运行流程?
  12. spring mvc 有哪些组件?
  13. @RequestMapping 的作用是什么?
  14. @Autowired 的作用是什么?

1. 为什么要使用 spring?

  • spring 提供 ioc 技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。
  • spring 提供了事务支持,使得事务操作变的更加方便。
  • spring 提供了面向切片编程,这样可以更方便的处理某一类的问题。
  • 更方便的框架集成,spring 可以很方便的集成其他框架,比如 Mybatis、hibernate等。

2. 解释一下什么是 aop?

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系,对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。


3. 解释一下什么是 ioc?

ioc:Inversionof Control(控制反转)是 spring 的核心,对于 spring 框架来说,就是由 spring 来负责控制对象的生命周期和对象间的关系。

简单来说,控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了,由其他(类,第三方容器)管理。

IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 - “Don’t call me, we will call you”。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

一个类A需要用到接口B中的方法,那么就需要为类A和接口B建立关联或依赖关系,最原始的方法是在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统。如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(构造器或setter方法),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。
依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。


4. spring 有哪些主要模块?

  • spring core:框架最基础部分,提供 ioc 和依赖注入特性。
  • spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
  • spring dao:Data Access Object 提供了 JDBC 的抽象层。
  • spring aop:提供了面向切面的编程实现,让你可以自定义拦截器,切点等。
  • spring Web:提供了针对 Web 开发集成特性,例如文件上传,利用 servlet listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
  • spring Web mvc:spring 中的 mvc 封装包提供了 Web 应用的 Model-View-Controller(MVC)的实现。

5. spring 常用的注入方式有哪些?

  • setter 属性注入
  • 构造方法注入
  • 注解方式注入

1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?


1. 为什么要使用 spring?

Spring/SpingMVC常见问题总结相关推荐

  1. 无法获取计算机名,Spring Cloud常见问题之:无法注册主机名

    此前,笔者已经写过多篇总结Spring Cloud常见问题的博客(详情请在本博客首页http://www.itmuch.com 搜索按钮进行搜索,关键词:常见问题). 本文将讨论微服务无法向Eurek ...

  2. 【Spring boot 常见问题】

    Spring boot 常见问题 关于spring-boot-starter-parent报红的解决方法 SpringBoot中spring-boot-maven-plugin爆红 启动SpringB ...

  3. 15个经典的Spring面试常见问题

    我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star.会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclim ...

  4. java B2B2C Springcloud电子商城系统-Spring Cloud常见问题与总结(四)

    一.Spring Cloud定位问题思路总结 Spring Cloud进入Camden时代后,已经比较稳定.一般来说,问题都不是Spring Cloud本身的Bug导致.建议按照如下步骤进行定位.需要 ...

  5. Spring的常见问题及答案

    目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...

  6. 我的开发笔记spring等常见问题

    请求 @Responsebody注解表示该方法的返回的结果直接写入 HTTP 响应正文中,一般在异步获取数据时使用: 在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Respo ...

  7. spring+quarts常见问题

    javax/transaction/UserTransaction Caused by: java.lang.NoClassDefFoundError: javax/transaction/UserT ...

  8. SpringCloud常见问题总结(二)

    Spring Cloud各组件属性配置 SpringCloud中的大部分问题可以使用配置属性来规避, Spring Cloud的配置 Spring Cloud的所有组件配置都在其官方文档的附录中 Sp ...

  9. Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

    在了解Spring框架中@Repository @Component , @Service @Controller , @Repository @Controller和@Repository批注之间的 ...

最新文章

  1. 还有 13 天,苹果就要关上 HTTP 大门了
  2. iOS内存管理策略和实践
  3. ffmpeg-win32-v3.2.4 下载_为知笔记安卓版下载 8.1.4
  4. 【已解决】Linux远程桌面连接-VNC
  5. SAP PI screenshot
  6. mysql noinstall_免安装版MySql安装与配置
  7. WordPress 主题教程 #4b:Header 模板 2
  8. CSS cursor 属性-鼠标形状
  9. 魔兽世界最新网通服务器列表,魔兽世界网通区,魔兽世界网通区在几区
  10. sqlite 数据量_Sqlite数据库从入门到放弃
  11. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分
  12. python标准库os_Python标准库 os
  13. 黑客帝国屏保源码!快拿去试试吧!炫酷无比!
  14. Fedora14 root用户登陆
  15. oracle 统计每天新增订单数量
  16. 目标检测系列——Faster R-CNN原理详解
  17. IBM车库创新:为科技创新头号工程打造共创引擎
  18. 手机视频监控解决方案(客户端)
  19. 动手学ocr·十讲--学习笔记一
  20. VM Tools 安装

热门文章

  1. php开启curl扩展
  2. 以持续集成工具实现DevOps之禅
  3. Ubuntu 安装系统资源托盘监视应用
  4. 【博客话题】技术生涯中的出与入
  5. python argv参数
  6. 中石油训练赛 - Watch Later(状压dp)
  7. 2019ICPC(上海) - Color Graph(二分图+状态压缩)
  8. POJ - 1966 Cable TV Network(最小割-最大流)
  9. 2019ICPC(徐州) - Colorful String(哈希+二分+动态规划/回文自动机)
  10. 数据科学竞赛-自然语言处理赛流程