关于Spring的几个问题总结

参考文章:https://blog.youkuaiyun.com/u012702547/article/details/95938198

文章部分答案来源于:

90.为什么使用Spring?

在Java中,Spring是一个开源源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿真个系统应用,Spring是一个分层的JavaSE/EE 一站式轻量级开源框架。

特点:

1.方便解耦 简化开发(通过Spring 提供的IOC容器,我们可以将对象之间的依赖关系交由Spring控制,避免硬编码造成的过度程序耦合)

2.AOP编程的支持(通过Spring 提供的AOP功能,方便进行面向切面编程,)

3.声明式事务的支持

4.方便程序的测试

5.方便集成各种优秀的框架

6.降低Java EE API 的使用难度

初识Spring 为什么使用Spring?

91.解释一下什么是 aop?

在程序运行时将代码切入到类的指定方法,指定位置上的编程思想就是面向切面的编程。

使用AOP技术,可以将一些系统相关的编程工作独立提取出来,独立实现,然后通过切面进入系统。

AOP相关的概念:Aspect(切面) Joint point(连接点)  Advice(通知) PointCut(切点)

面试题:解释一下什么是AOP(面向切面编程)

实战例子:https://blog.youkuaiyun.com/tangthh123/article/details/104141389

92.解释一下什么是 IOC?

IOC翻译成控制反转。控制对象的创建和销毁,控制对象的生命周期。之前我们创建一个对象都是new ,IOC 指的是将对象的控制权给了IOC容器。

参考文章:https://baijiahao.baidu.com/s?id=1654948911688026610&wfr=spider&for=pc

详细解释:https://blog.youkuaiyun.com/u013310119/article/details/51327109

93.spring 有哪些主要模块?

Spring框架的七大模块。

1. Spring Core
框架的最基础部分,提供 IoC 容器,对 bean 进行管理。

2.Spring Context
基于 bean,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化、校验和调度等功能。

3.Spring DAO
提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码,还提供了声明性事务管理方法。

4.Spring ORM
提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate、MyBatis 等。

5.Spring AOP
提供了符合AOP Alliance规范的面向方面的编程实现。

6.Spring Web
提供了基础的 Web 开发的上下文信息,可与其他 web 进行集成。

7.Spring Web MVC
提供了 Web 应用的 Model-View-Controller 全功能实现。
 

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

主要有三种,构造方法注入,setter注入,基于注解的注入。

参考文章:https://blog.youkuaiyun.com/qq594913801/article/details/80512451

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

不是线程安全的

参考文章:https://www.cnblogs.com/myseries/p/11729800.html

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

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的bean只有一个实例。

prototype:原型模式,每次通过容器的getbean方法获取prototype定义的bean时,都产生一个新的bean实例。

只有在web应用中使用Spring时,request session global-session作用域才有效

  1. request 对于每次HTTP请求,使用request定义的bean都将产生一个新实例,即每次HTTP请求将会产生不同的bean实例。
  2. session 同一个session共享一个bean实例。
  3. global-session:同session作用域不同的是,所有的session共享一个bean实例

 

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

1. no:这是Spring框架的默认设置,默认不支持自动装配

2. byName:从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找标签的id属性值。如果有相同的,那么获取这个对象,实现关联。整个Spring环境:表示所有的spring配置文件中查找,那么id不能有重复的。

3. byType:从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找标签的class属性值。如果有相同的,那么获取这个对象,实现关联。缺点:如果存在多个相同类型的bean对象,会出错。如果属性为单一类型的数据,那么查找到多个关联对象会发生错误。如果属性为数组或集合(泛型)类型,那么查找到多个关联对象不会发生异常。

4. constructor:使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。

5. autodetect:自动选择:如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter注入。


 

补充Spring 的装配方式:

Spring容器负责创建应用程序中的bean同时通过id 来协调这些对象之间的关系,作为开发人员,我们需要告诉Spring要创建哪些bean 并且如何将其装配在一起。

  • 1.隐式的bean发现机制和自动装配。
  • 2.在java代码中或者XML中进行显示配置。

参考文章:

https://www.cnblogs.com/zuochengsi-9/p/9047111.html 

http://www.yq1012.com/myweb/4479.html

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

1.编程式事务管理对基于pojo 的应用来说是唯一选择,我们需要在代码中调用beginTransaction() comit() rollback等事务管理相关的方法,这就是编程式事务。

2.基于TransactionProxyFactoryBean的声明式事务管理

3.基于@Transactional 的声明式事务管理

4.基于Aspect AOP 配置事务。

参考文章:https://blog.youkuaiyun.com/mufeng633/article/details/88552245

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

@Transactional(propagatio=Propagation.REQUIRED)  如果有新事务就新添加一个事务,没有默认添加一个

@ Transactional(propagation=Propagation.NOT_SUPPORTED)  不支持事务,按照非事务方式执行。

@ Transactional(propagation=Propagation.REQUIRES_NEW)  不管事务是否存在直接新建一个事务,如果都创建事务,原来的事务挂起,当第二个事务执行完毕后,在执行挂起的事务。

@ Transactional(propagation=Propagation.MANDATORY)  必须在一个事务中执行完毕否则抛出异常。@Transactional(propagation=Propagation.NEVER)  必须在一个没有的事务中执行,否则抛出异常

@ Transactional(propagation=Propagation.SUPPORTS) 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.

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

  • 1.用户发送请求至前端控制器 DispatcherServlet
  • 2.DispatcherServlet 收到请求调用HandlerMapping 处理器映射器。
  • 3.处理器映射器(HandlerMapping)找到具体的处理器(可以根据xml配置,注解进行查找),生成代理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet
  • 4. DispatcherServlet 调用handlerAdapter 处理器适配器。
  • 5.HandlerAdapter经过适配调用 具体的处理器(Controller) 也叫后端控制器。
  • 6.Controller 执行完成返回ModelAndView
  • 7.HandlerAdapter 将controller执行结果 ModelAndView 返回给DispatcherServlet.
  • 8.DispatcherServlet 将ModelAndView 传给ViewReslover 视图解析器。
  • 9.ViewReslover 解析后返回具体View
  • 10.DispatcherServlet 根据View 进行渲染视图(即将模型数据填充至视图中)
  • 11.DispatcherServlet 响应用户

101.spring mvc 有哪些组件?

前端控制器(DispatcherServlet) 
处理器映射器(HandlerMapping) 
处理器适配器(HandlerAdapter) 
拦截器(HandlerInterceptor)
语言环境处理器(LocaleResolver)
主题解析器(ThemeResolver)
视图解析器(ViewResolver) 
文件上传处理器(MultipartResolver)
异常处理器(HandlerExceptionResolver) 
数据转换(DataBinder)
消息转换器(HttpMessageConverter)
请求转视图翻译器(RequestToViewNameTranslator)
页面跳转参数管理器(FlashMapManager)
处理程序执行链(HandlerExecutionChain) 
————————————————
版权声明:本文为优快云博主「ConstXiong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/meism5/article/details/90446749

102.@RequestMapping 的作用是什么?

是一个注解,用来标识http请求地址与Controller 类的方法之间的映射。可作用于类和方法上,方法请求的完整地址是Controller类上的RequestMapping value中的值 加上方法上的RequestMapping value上的值。

 

103.@Autowired 的作用是什么?

@Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。
@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
 
import blog.service.ArticleService;
import blog.service.TagService;
import blog.service.TypeService;
 
@Controller
public class TestController {
 
    //成员属性字段使用 @Autowired,无需字段的 set 方法
    @Autowired
    private TypeService typeService;
    
    
    //set 方法使用 @Autowired
    private ArticleService articleService;
    @Autowired
    public void setArticleService(ArticleService articleService) {
        this.articleService = articleService;
    }
 
    //构造方法使用 @Autowired
    private TagService tagService;
    @Autowired
    public TestController(TagService tagService) {
        this.tagService = tagService; 
    }
    
}

参考文章: https://www.cnblogs.com/ConstXiong/p/12131499.html


十一、Spring Boot/Spring Cloud

104.什么是 spring boot?

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。以往在使用Sping框架的时候我们需要在项目中建立多个配置文件,有时候一个小小的问题都要找上大半天,而Springboot非常简洁,只要引入jar包依赖,在配置文件中配置一下即可,并且Springboot框架内置tomcat ,环境搭建比较快,易上手,大大的提高了开发速度。
 

105.为什么要用 spring boot?

1.简化编码:创建一个web项目SpringBoot只需要在pom.xml文件中引入spring-boot-starter-web  ,而以往的项目我们需要引入更多的jar包。

2.简化部署:SpringBoot内嵌了tomcat 启动部署非常方便,以往的项目我们创建好项目以后还需要自行配置tomcat 然后再打包部署,所以SpringBoot部署更方便。

3.简化配置:SpringBoot提供了很多注解,使用注解非常方便。

4.独立运行:Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只  要打成一个可执行的jar包就能独立运行,
 

106.spring boot 核心配置文件是什么?

核心配置文件有俩种,一种是 .properties 还有一种是.yml 文件。

可参考:https://blog.youkuaiyun.com/tangthh123/article/details/104144115

107.spring boot 配置文件有哪几种类型?它们有什么区别?

.properties 和.yml 另外需要注意的是.yml 不支持@PropertySource 注解导入配置。

108.spring boot 有哪些方式可以实现热部署?

  1. Spring Loaded
  2. Spring-boot-devtools
  3. JRebel 插件

可参考:

https://blog.youkuaiyun.com/youanyyou/article/details/78993049

https://blog.youkuaiyun.com/youanyyou/article/details/78993049

109.jpa 和 hibernate 有什么区别?

详细解释:https://www.jdon.com/51332

JPA是规范,Hibernate是对这个规范的实现。

这意味着:我们的代码只需要针对JPA来编写,通过配置,在运行时使用Hibernate来执行真正的持久化工作。

110.什么是 spring cloud?

SpringCloud 是一个微服务框架的规范,提供了全套的分布式系统解决方案。 

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现注册,配置中心,消息总线,负载均衡,数据监控,断路器,智能路由,领导选举,分布式会话,集群状态)。

服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控

111.spring cloud 断路器的作用是什么?

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝) 向调用放返回一个错误响应,而不是长时间的等待,这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统的蔓延。

112.spring cloud 的核心组件有哪些?

Eureka   Feign   Ribbon  Hystrix   Zuul

可参考文章:https://developer.51cto.com/art/201811/586513.htm


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值