目录
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