首页 > 其他分享 >spring 常见20问

spring 常见20问

时间:2023-06-12 18:44:52浏览次数:26  
标签:容器 Spring 20 对象 spring 常见 Bean AOP IoC

目录 

1.Spring是什么?作用是什么?
2.你对IoC(控制反转 Inversion of Control)是怎么理解的?
3.什么是AOP(面向切面编程 Aspect Oriented Programming)?
4.Spring中Bean之间的依赖关系是怎样的?
5.Spring框架中的单例模式是怎样实现的?
6.Spring中的事务管理是如何实现的?
7.Spring的优势是什么?
8.解释一下Spring中的BeanFactory和ApplicationContext有什么区别。
9.Spring中的注解有哪些?
10.Spring MVC框架的流程是怎样的?
11.Spring Boot是什么?与传统的Spring框架有什么区别?
12.解释一下Spring的生命周期。
13.Spring中的IOC如何管理对象?
14.Spring中的AOP的具体实现方式有哪些?
15.Spring中的JdbcTemplate是什么?使用JdbcTemplate需要做哪些配置?
16.解释一下Spring中的循环依赖问题。
17.Spring中的事件驱动机制是怎样的?有哪些默认事件?
18.Spring的MVC框架中,HandlerAdapter的作用是什么?
19.@Autowired和@Resource注解用来干嘛的?
20.Spring中的事务传播属性有哪些?

 

 

Spring作为现代开发中最流行的框架之一,让开发者可以更加方便高效地构建应用系统。但是对于初学者而言,常常会遇到很多困惑。本篇文章收集了50道常见的Spring面试题,并对每道题进行了详细的解释,希望能够对读者有所帮助。

1.Spring是什么?作用是什么?

Spring是一个轻量级的JavaEE框架,它主要解决企业应用中的复杂性问题。Spring框架有三个核心部分:IoC容器、AOP和数据访问/集成层。Spring中的IoC容器提供了一种对象创建和对象之间关系管理的机制,以实现松散耦合和可扩展性。AOP提供了一种很好的方式来实现横向关注点的处理,如事务管理,安全检查,缓存等。数据访问/集成层则提供了许多针对不同数据持久化技术的实现,比如JDBC,ORM和NoSQL。

2.你对IoC(控制反转 Inversion of Control)是怎么理解的?

IoC是一种设计思想,通过将对象之间的依赖关系交给容器来管理,从而实现松散耦合。在Spring中,IoC容器扮演了一个中心角色,负责创建对象,装配对象之间的依赖关系,并管理它们的整个生命周期。IoC还提供了一些高级功能,如AOP和事件驱动等,可以进一步增强应用程序的可维护性和可扩展性。

3.什么是AOP(面向切面编程 Aspect Oriented Programming)?

AOP是一种编程范式,它能够在程序运行期间动态地将代码切入到原有代码的流程中,从而实现横向关注点的处理,如日志记录、事务管理和安全检查等。在Spring中,AOP是通过代理模式来实现的,在创建Bean时为Bean生成一个代理对象,代理对象能够拦截指定方法的调用,并在执行前或执行后执行特定操作。

4.Spring中Bean之间的依赖关系是怎样的?

在Spring中,Bean之间的依赖关系主要通过构造函数注入、Setter方法注入和自动注入来实现。构造函数注入是通过Bean的构造方法注入其他Bean作为参数来实现;Setter方法注入是通过Bean的Setter方法来注入其他Bean;自动注入则是通过IoC容器在Bean创建时自动发现并注入其他Bean,可以通过设置@Autowired或@Resource注解来完成。

5.Spring框架中的单例模式是怎样实现的?

在Spring中,默认情况下,所有的Bean都是单例的。当IoC容器创建一个Bean时,它会缓存该Bean的实例,并在后续请求中返回相同的实例。这种机制可以提高应用程序的性能并减少内存消耗,但也需要注意线程安全和状态管理等问题。

6.Spring中的事务管理是如何实现的?

Spring通过AOP在运行时动态地将事务相关的逻辑切入到指定的方法中,从而实现事务管理。通常情况下,Spring使用声明式事务管理来管理事务。开发者可以通过@Transactional注解或XML配置文件来定义事务范围、传播属性以及回滚规则等。

7.Spring的优势是什么?

Spring的主要优势有:

1)提高了应用程序的可扩展性和可维护性。

2)提供了一种松散耦合的方式来管理对象之间的依赖关系。

3)提供了完整的数据访问/集成层,支持多种持久化技术。

4)提供了AOP支持,可以很方便地实现横向关注点的处理。

5)提供了很好的集成支持,可以与其他框架无缝协作。

8.解释一下Spring中的BeanFactory和ApplicationContext有什么区别。

BeanFactory是Spring IoC容器的最基本形式,提供了基本的IoC功能。它是延迟初始化的,即当一个Bean被实际使用时才被创建。ApplicationContext是BeanFactory的子接口,提供了更多的企业级功能,如AOP,事件驱动,国际化等。ApplicationContext也是预初始化的,即在容器启动时就已经创建了所有的Bean。

9.Spring中的注解有哪些?

Spring中的常用注解有:

1)@Component、@Service、@Repository、@Controller:用于标识Bean的角色。

2)@Autowired、@Resource:用于自动装配Bean。

3)@PostConstruct、@PreDestroy:用于指定初始化和销毁方法。

4)@Transactional:用于声明式事务管理。

5)@Scope:用于指定Bean作用域。

10.Spring MVC框架的流程是怎样的?

Spring MVC的处理流程如下:

1)客户端向服务器发起请求。

2)DispatcherServlet接收到请求并将请求发送给处理器映射器进行处理器的映射查找。

3)处理器映射器将请求的URL映射到相应的控制器(Controller)上,并返回处理器及其拦截器(如果有)。

4)DispatcherServlet调用处理器适配器(Adapter)执行映射的处理器(Controller)。

5)处理器(Controller)执行后返回ModelAndView对象。

6)DispatcherServlet将ModelAndView对象交给视图解析器(ViewResolver)进行解析。

7)视图解析器(ViewResolver)解析出对应的视图(View)。

8)DispatcherServlet将Model数据和View视图进行渲染后返回给客户端。

11.Spring Boot是什么?与传统的Spring框架有什么区别?

Spring Boot是一种基于Spring的快速应用开发框架,它能够让开发者更加快速地搭建基于Spring的应用程序,并提供了自动化配置、快速启动等便利功能。相比传统的Spring框架,Spring Boot具有更简洁的配置方式和更快的启动速度,同时还提供了更多的功能和特性支持。

12.解释一下Spring的生命周期。

在Spring中,Bean的生命周期包括以下几个阶段:

1)实例化:当IoC容器读取到Bean的定义后,创建一个新的Bean实例。

2)属性注入:IoC容器将Bean中声明的依赖关系和配置信息注入到Bean中。

3)BeanPostProcessor前置处理:如果Bean中定义了BeanPostProcessor接口的实现类,它们将在Bean初始化之前被调用。

4)初始化:如果Bean实现了InitializingBean接口,则在所有属性都被设置完毕后调用afterPropertiesSet()方法。同时,也可以通过@Bean(initMethod = "init")来指定Bean的初始化方法。

5)BeanPostProcessor后置处理:如果Bean中定义了BeanPostProcessor接口的实现类,它们将在Bean初始化之后被调用。

6)销毁:如果Bean实现了DisposableBean接口,则在容器关闭或者该Bean被从容器中移除时调用destroy()方法。同时,也可以通过@Bean(destroyMethod = "destroy")来指定Bean的销毁方法。

13.Spring中的IOC如何管理对象?

在Spring中,IOC通过Bean工厂来管理对象,Bean工厂是提供了一种对象创建和对象之间关系管理的机制。它在读取配置文件时会自动创建和装配对象,并缓存这些对象以便后续使用。开发者可以通过构造器注入、Setter方法注入和自动注入等方式来管理对象之间的依赖关系。

14.Spring中的AOP的具体实现方式有哪些?

Spring中实现AOP的主要方式有两种:JDK动态代理和CGLIB代理。JDK动态代理又叫接口代理,它是基于Java反射机制实现的,要求目标对象必须实现至少一个接口;CGLIB代理则是基于字节码操作实现的,当目标对象没有实现接口时,它就会使用CGLIB代理。通常情况下,Spring默认使用JDK动态代理来实现AOP,但如果目标对象没有实现任何接口,则会自动切换到使用CGLIB代理。

15.Spring中的JdbcTemplate是什么?使用JdbcTemplate需要做哪些配置?

JdbcTemplate是Spring提供的一个对JDBC访问的封装,它简化了JDBC操作的繁琐和冗长,能够提高开发效率。使用JdbcTemplate需要在Spring的配置文件中配置基本数据源信息、配置JdbcTemplate Bean以及为JdbcTemplate Bean配置数据源。

16.解释一下Spring中的循环依赖问题。

循环依赖指两个或多个Bean之间相互引用,形成了一个无限循环调用的情况。在Spring容器中,如果存在循环依赖,但是都是单例模式的Bean,则可以通过Spring容器提前暴露正在创建的Bean,从而避免循环依赖问题。如果存在循环依赖且其中一方是原型模式的Bean,则Spring无法处理这种情况。

17.Spring中的事件驱动机制是怎样的?有哪些默认事件?

Spring中的事件驱动机制基于观察者模式实现。当一个Bean发生事件时,它会创建一个事件对象并将其发布到Spring容器上。容器中所有对该事件对象感兴趣的Bean都会收到事件通知并进行相应的处理。Spring中默认的事件有:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent和ContextClosedEvent。

18.Spring的MVC框架中,HandlerAdapter的作用是什么?

HandlerAdapter是Spring MVC框架中的一个重要组件,它的作用是将请求交给相应的处理器(Controller)进行处理,并负责调用处理器的方法来生成ModelAndView对象。

19.@Autowired和@Resource注解用来干嘛的?

@Autowired和@Resource注解是用于自动装配Bean的。@Autowired是Spring提供的注解,可以在Setter方法上、构造函数上、类属性上进行标注,用于自动注入匹配类型的Bean。@Resource是JavaEE提供的注解,可以在Setter方法上或类属性上进行标注,用于自动注入指定名称和类型匹配的Bean。

20.Spring中的事务传播属性有哪些?

Spring中的事务传播属性主要有以下几种:

1)PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新的事务。

2)PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则不开启事务。

3)PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。

4)PROPAGATION_REQUIRES_NEW:无论是否存在事务,都创建一个新的事务并进行执行。

标签:容器,Spring,20,对象,spring,常见,Bean,AOP,IoC
From: https://www.cnblogs.com/shoshana-kong/p/17475845.html

相关文章

  • Redis 常见问题总结
     目录 一、Redis为什么快?二、Redis合适的应用场景三、Redis为什么6.0之前不支持多线程四、Redis为什么6.0之后引入多线程五、Redis有哪些高级功能六、为什么需要使用Redis七、Redis的事务八、Redis的过期策略以及内存淘汰机制九、什么是缓存穿透?如何避免?十、什么是缓......
  • 随笔(十八)『SpringBoot 整合 Swagger2』
    1、添加Swagger2依赖<!--swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>......
  • gradle 构建springboot 项目两种方式
    第一种直接用插件spring-boot-gradle-plugin无需写入版本buildscript{repositories{maven{url'https://maven.aliyun.com/repository/public'}}dependencies{classpath'org.springframework.boot:spring-boot-gradle-plugin......
  • win10系统开启同时多用户远程连接桌面,支持22H2,版本10.0.19041.2075
    1.打开远程桌面控制并开启多用户连接1)win+r打开运行窗口,输入gpedit.msc,进入“本地组策略编辑器”2)按以下步骤找到远程桌面会话主机:计算机配置-->管理模板-->Windows组件-->远程桌面服务-->远程桌面会话主机-->连接 3)编辑远程桌面会话主机连接 3.1)双击“允许用户通......
  • Codeforces Round #320 (Div. 2) - D. "Or" Game
    原题链接D."Or"GametimelimitpertestmemorylimitpertestinputoutputYouaregiven n numbers a1, a2, ..., an.Youcanperformatmost k operations.For......
  • Educational Codeforces Round 20-C. Maximal GCD
    原题链接C.MaximalGCDtimelimitpertestmemorylimitpertestinputoutputn.Youshouldcreatesuch strictlyincreasing sequenceof k positivenumbers a1, a2, ..., ak,thattheirsumisequalto nGr......
  • Looksery Cup 2015-H. Degenerate Matrix(浮点数二分)
    原题链接H.DegenerateMatrixtimelimitpertestmemorylimitpertestinputoutputdeterminant ofamatrix 2 × 2degeneratenorm ||A|| ofamatrix AYouaregivenamatrix .Consideranydegeneratemat......
  • 2023年度Linux系统安装与移除JDK保姆级教程
    简介本篇文章介绍了如何在CentOS系统上安装与移除JDK,并提供了两种不同的安装与移除方法。我们还将针对每种方法的优点和缺点进行对比前置条件在开始之前,请确保您已经在虚拟机中安装CentOS系统如果没有安装请参考我之前的VMwareWorkstation17Pro安装配置CentOS7与ssh......
  • 2023年度Linux安装与移除tomcat保姆级教程
    前言Tomcat是一个流行的JavaServlet容器,用于开发和部署JavaWeb应用程序。本文将介绍如何在CentOS操作系统上安装与移除Tomcat,并提供了逐步说明以及相关命令。读者需要具备一定的Linux基础知识,如使用命令行工具等。安装前置条件在开始安装Tomcat之前,请确保您已满足以下条件:......
  • springboot日期格式化,时差问题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、mysql中日期字段的正确设置二、日期格式化,时差1.日期字段返回格式不正确--方案一2.日期字段返回格式不正确--方案二二、日期无法自动填充1.mybatis-plus2.mybatis只能靠自己了总结前言随着mysql8......