Spring面试题!

什么是spring

Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

IOC(控制反转)

它不是一种技术而是一种设计思想,负责创建对象,管理对象(通过依赖注入(DI),创建对象的权限原来是在代码应用中的,现在交给了spring容器帮我们创建。优点:耦合性降低,更加专注于业务逻辑,代码量降低。

依赖注入(其实跟IOC一个概念)

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

依赖注入有几种形式

  1. 接口注入:指的是在接口中定义要注入的信息,并通过接口完成注入。
  2. Set注入:指的是在接受注入的类中定义一个set方法,并在参数中定义需要注入的的元素
  3. 构造出方法注入:的是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。当有多个构造方法时,spring默认的是选构造方法,当只有一个有参构造方式时,spring会选该方法,但是当有多个有参构造方法时,spring就不知道该找谁了,就会报错。

AOP(面向切面)

能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。

AOP的相关名词

Advice (增强/通知) 表示需要扩展的功能。
JoinPoint (连接点) 表示允许使用增强的地方。基本每个方法的前、后或异常等都是连接点。
Pointcut (切入点) 表示实际增强的方法。
Aspect (切面) 表示扩展功能的过程。
Introduction( 引入) 表示向现有的类中添加新方法、新属性。
Target (目标对象) 表示被增强的对象。
Proxy (代理) 表示实现AOP的机制。
Weaving (织入) 表示把增强应用到目标对象的过程。

补充知识:AOP称为面向切面编程。
AOP的本质是过滤器。
AOP的实现原理是代理模式。

spring框架用到了哪些设计模式

1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。

2.代理设计模式:Spring AOP功能的实现。

3.单例设计模式:Spring中的bean默认都是单例的。

4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。

5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。

6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。

7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。

spring的生命周期

第一阶段:实例化(Instantiation)

       //实例化是指Bean 从Bean到Object  
       Object wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);

第二阶段: 属性赋值

第三阶段:初始化(Initialization)

单列bean实在启动ioc容器就创建了,但是多例bean是在getBean时才去创建。

第四阶段:销毁:调用destory方法。

什么是bean的自动装配

Spring 容器能够自动装配相互合作的bean,这意味着容器不需要和配置,能通过Bean工厂自动处理bean之间的协作。

如何自动检测bean

@Component:标识该类为spring组件
@Controller:标识该类为spring mvc
@Respository:标识该类为数据仓库
@Service:标识该类为服务

spring 的优点

  1. 分层架构 ,所以你只需要关注你所需要的层,不需要管不需要的层,这样提高了业务的专注性。
  2. 依赖注入和IOC使JDBC操作简单化
  3. spring是开源的框架
  4. spring使得对象管理集中化和简单化
  5. spring是POJO,POJO编程使得可持久化构建和可测试能力提高。

四种类型的自动装配

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

spring事务有几种

编码式事务,声明式事务

声明式事务管理的事务属性有几种

在这里插入图片描述

脏读,不可重复读和幻读是什么意思

在这里插入图片描述

什么是spring MVC,简单介绍一下你对Spring mvc的理解

在这里插入图片描述

Spring mvc的流程

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle.
    在这里插入图片描述

spring mvc常用注解

在这里插入图片描述

Spring中的单例bean是线程安全的吗

不是,Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。

对于单例Bean,所有线程都共享一个单例实例Bean,因此是存在资源的竞争。

如果单例Bean,是一个无状态Bean,也就是线程中的操作不会对Bean的成员执行查询以外的操作,那么这个单例Bean是线程安全的。比如Spring mvc 的 Controller、Service、Dao等,这些Bean大多是无状态的,只关注于方法本身。

对于有状态的则可以用ThreadLocal

bean的作用域

singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

BeanFactory 工厂和 Application contexts 有什么区别?

  1. ApplicationContext是BeanFactory的子接口。
  2. BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:

①继承MessageSource,因此支持国际化。

②统一的资源文件访问方式。

③提供在监听器中注册bean的事件。

④同时加载多个配置文件。

  1. BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。
  2. ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。

什么是Servlet

它其实就是个前端页面和数据库实现数据交互的中转站,它包括

Servlet生命周期

init()初始化阶段
Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会调用一次
service()处理客户端请求阶段
每收到一个客户端请求,服务器就会产生一个新的线程去处理。然后根据客户的请求在去调用doGet()还是doPut()方法
destroy()终止阶段
当web应用被终止,或者Servlet容器终止运行,或者Servlet重新装载Servlet新实例时,Servlet容器会调用Servlet的destroy()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring的底层原理主要包括以下几个方面:IOC(Inverse of Control,控制反转)、AOP(Aspect-Oriented Programming,面向切面编程)、Bean生命周期管理、以及Spring的核心组件。 1. IOC(控制反转):IOC是Spring的核心思想,它通过容器管理和维护对象之间的依赖关系,将对象的创建、组装和生命周期交给容器来管理。在Spring中,我们通过配置文件或者注解来描述对象之间的依赖关系,而不是在代码中直接去创建和关联对象。 2. AOP(面向切面编程):AOP是一种编程思想,它将应用程序的业务逻辑与横切关注点(如日志、事务、安全等)分离开来,实现了模块化的设计。Spring利用AOP可以实现诸如日志记录、性能统计、事务管理等横切关注点的功能。 3. Bean生命周期管理:Spring通过Bean生命周期管理来管理Bean的创建、初始化、使用和销毁等过程。在容器启动时,Spring会根据配置信息创建Bean实例并进行初始化,然后在需要使用时将Bean注入到其他对象中。当容器关闭时,Spring会销毁这些Bean实例。 4. Spring的核心组件:Spring的核心组件包括容器(ApplicationContext)、BeanFactory、BeanPostProcessor等。容器负责管理和维护Bean的生命周期,提供依赖注入和AOP的支持;BeanFactory是Spring的核心接口,定义了容器的基本功能;BeanPostProcessor是一个回调接口,可以在Bean实例化、初始化和销毁的过程中介入进行扩展。 总之,Spring底层原理主要围绕IOC、AOP和Bean生命周期管理展开,通过这些机制实现了松耦合、可维护和可扩展的应用程序开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值