Spring/Spring MVC

90.为什么要使用 spring?

答:spring是一个开源框架,是个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

  • 方便结构简化开发
  • AOP编码的支持
  • 声明式事物的支持
  • 方便程序的测试
  • 方便集成各种优势框架
  • 降低Java EE API 的使用难度

91.解释一下什么是 aop?

 答:AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。

AOP分为静态AOP和动态AOP:

  • 静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。
  • 动态AOP是指将切面代码进行动态织入实现的AOP,JDK动态代理。

92.解释一下什么是 ioc?

答:即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

  IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

93.spring 有哪些主要模块?

答:core模块、aop模块、data access模块、web模块、test模块

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

答:详细解析:https://blog.csdn.net/a909301740/article/details/78379720

  • 构造方法注入
  • setter注入
  • 基于注解注入

95.spring 中的 bean 是线程安全的吗?

答:

  Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。

最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。

96.spring 支持几种 bean 的作用域?

答:singleton、prototype、request、session、globalSession五中作用域。

97.spring 自动装配 bean 有哪些方式?

答:可分为四种:

  • byName:按照bean的属性名称来匹配要装配的bean
  • byType:按照bean的类型来匹配要装配的bean
  • constructor:按照bean的构造器入参的类型来进行匹配 
  • autodetect(自动检测):先使用constructor进行装配,如果不成功就使用byType来装配

98.spring 事务实现方式有哪些?

答:三种

(1)基于 TransactionProxyFactoryBean的声明式事务管理

(2)基于 @Transactional 的声明式事务管理

(3)基于Aspectj AOP配置事务

https://blog.csdn.net/qq_42914528/article/details/83743726

spring事务实现原理    动态代理

99.说一下 spring 的事务隔离?

答:spring事务传播和隔离

100.说一下 spring mvc 运行流程?

答:DispatcherServlet->HandlerMapping->HandlerAdapter->ModelAndView->ViewResolver->view

https://www.cnblogs.com/hujiapeng/p/5765636.html

101.spring mvc 有哪些组件?

答:

DispatcherServlet(前端处理器)收到请求后,依据HandlerMapping的配置,调用相应的Controller来处理

Controller将处理结果封装成ModelAndView对象,返回给DispatcherServlet.

DispatcherServlet依据ViewResolver的解析,调用相应的视图对象,(如jsp)来生成相应的页面。

102.@RequestMapping 的作用是什么?

答:@RequestMapping注释用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

103.@Autowired 的作用是什么?

答:spring可以自动帮你把Bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
@Autowired注释进行自动注入时,spring容器中匹配的候选Bean数目必须有且仅有一个。
当找不到一个匹配的Bean时,spring容器将抛出BeanCreationException异常,并指出必须至少拥有一个匹配的Bean。
如果spring容器中拥有多个候选Bean,spring容器在启动时也会抛出BeanCreationException
这个时候就可以借助@Qualifier注释指定注入Bean的名称,这样@Autowired遇到多个候选Bean的问题也就解决了。

原文地址:https://www.cnblogs.com/zousong/p/10513338.html