Spring面试题——第三篇

1. Spring由哪些重要的模块组成

  1. Core Container(核心容器)
  • Spring Core:提供了依赖注入和控制反转的实现,所有其他Spring模块的基础,别的模块都会依赖此模块。
  • Spring Beans:负责管理Bean的定义和生命周期,通过IOC容器完成Bean的创建、依赖注入、初始化、销毁等操作。
  • Spring Context:基于Core和Beans的高级容器,提供了类似JNDI的上下文功能,还包含了国际化、事件传播、资源访问等。
  • Spring Expression Language(SpEL):一个强大的表达式语言,用于在运行时查询和操作对象的值。
  1. AOP(面向切面编程)
  • Spring AOP:提供面向切面编程的功能,可以在方法执行前后或者抛出异常时动态插入额外的逻辑,比如日志记录、权限验证、事务管理等。
  1. Data Access(数据访问)
  • Spring JDBC:简化了原生JDBC操作,提供模版方法来管理连接、资源释放和异常处理。
  • Spring ORM:支持与主流ORM框架继承
  • Spring Transaction:提供声明式事务管理机制,与数据库操作密切结合。
  1. Web层
  • Spring Web:提供基础的Web开发支持。
  • Spring MVC: 实现了MVC模式的框架,用于构建基于HTTP请求的web应用。

2. 什么是Spring IOC

Spring IOC是Spring框架的核心概念之一,它是通过 依赖注入 实现的。IOC让对象的创建和管理由容器负责,而不是对象自身控制。

  • 核心思想:控制反转意味着将对象的创建和依赖关系交由Spring容器管理,这种机制使得程序更加灵活和解耦。
  • 依赖注入:通过构造器注入、setter注入或者接口注入,将对象所需的依赖传递给他,而不是让对象自行创建依赖。

理解控制和反转
IOC,控制反转,控制指的是控制对象的创建,IOC容器根据配置文件来创建对象,在对象的生命周期内,在不同时期根据不同配置进行对象的创建和改造。
反转指的是创建对象以及注入对象的动作被反转了。反转之后,这个动作由IOC容器触发。

3. Spring中DI是什么

DI(依赖注入)普遍认为是Spring框架中用于实现控制反转的一种机制。DI的核心思想是由容器负责对象的注入,而不是由对象自行创建或者查找依赖对象。

通过DI,Spring容器在创建一个对象时,自动将这个对象的依赖注入进去,这样可以让对象和其依赖的对象解耦,提升系统的灵活性和可维护性。

4. 什么是Spring Bean

任何通过Spring容器实例化、组装和管理的Java对象都可以成为Spring Bean。Bean可以在Spring容器中被定义并且通过依赖注入和其他Bean进行互相依赖。

即Bean可以看作是Spring应用中的一个对象,他的生命周期(创建、初始化、使用、销毁等过程)完全由Spring容器管理。

1. Spring Bean的生命周期

  • 实例化:当Spring容器启动时,根据配置文件或者注解,Spring会首先实例化Bean。
  • 依赖注入:在实例化之后,Spring容器会通过构造器、setter方法或者注解将其他Bean的依赖注入进来
  • 初始化:如果Bean实现了InitializingBean接口或者使用了@PostConstruct注解,Spring会在依赖注入完成后调用相应的初始化方法。
  • 销毁:如果Bean实现了DisposableBean接口或者使用了@PreDestroy注解,Spring会在容器关闭时调用销毁方法。

2. 定义Spring Bean的方式

  • XML配置:早期的Spring应用通常通过使用< bean>标签来指定。
  • 基于注解的配置:使用@Component、@Service、@Repository、@Controller注解可以将类标记为Spring Bean。
  • Java配置类:通过@Configuration和@Bean注解,可以在Java类中手动定义Bean。

5. Spring中的BeanFactory是什么

BeanFactory是IOC的底层容器,负责管理和配置应用中的Bean,他是Spring IOC容器的基础实现,提供了创建和管理Bean的基本功能。通过BeanFactory,Spring容器可以按照需求加载和实例化Bean。

  • 核心概念:BeanFactory负责从配置源(XML、Java配置类、注解)中读取Bean的定义,并负责创建、管理这些Bean的生命周期。
  • 延迟加载:BeanFactory的一个重要特性是延迟初始化,即它只会在首次请求时才会实例化该Bean,而不是在容器启动时就立即创建所有的Bean。

BeanFactory的实现
Spring 是IOC的容器,其实就是Bean的工厂,他帮助我们生产Bean,如果我们需要Bean就从工厂拿到Bean,所以BeanFactory其实就是Spring的核心。

不过BeanFactory本身只是一个接口,一般我们所述的BeanFactory指的是他的实现类

  • DefaultListableBeanFactory:BeanFactory的默认实现,通常用于内部处理Bean的实例化和管理工作。
  • ApplicationContext

6. Spring中的FactoryBean是什么

FactoryBean是Spring提供的一个特殊接口,允许开发者通过自定义的逻辑创建复杂的Bean实例,与普通的Bean不同,通过FactoryBean创建的Bean不一定是FactoryBean本身,而是他生产的对象。

他提供了一种灵活的方式来控制Bean的创建过程,尤其适用于生成动态代理或者需要复杂配置的Bean。

  • 核心概念:FactoryBean是一个实现了FactoryBean接口的Bean,通过他可以自定义复杂对象的创建逻辑。Spring容器会调用getObject()方法来获取 实际的Bean实例。

1. FactoryBean的主要方法

  • getObject(): 这是FactoryBean最重要的方法,返回实际的Bean实例。Spring容器会调用这个方法来获取Bean。
  • getObjectType(): 返回由getObject()方法所返回的对象类型,Spring可以根据这个类型进行Bean的类型检查。
  • isSingleton():用于确定getObject()返回的Bean是否为单例,如果返回true,那么Spring容器只会创建一个实例;如果返回false,每次调用会创建一个新的实例。

2. FactoryBean的典型场景

  • 复杂对象创建:如果某个Bean的创建过程比较复杂,比如需要动态加载配置文件或者执行其他逻辑才能实例化对象,FactoryBean是非常合适的选择。
  • 代理对象的生成:FactoryBean常用于生成动态代理对象,例如Spring AOP使用FactoryBean生成代理对象,使得AOP切面能够透明的应用于目标对象。
  • 条件性Bean:在某些条件下返回不同的Bean实例,例如根据应用的环境配置不同的数据库连接池或者日志框架实现。

7. Spring中的ObjectFactory是什么

ObjectFactory是Spring框架中的一个接口,主要用于延迟获取Bean实例。

ObjectFactory提供了一种延迟加载的机制,通过getObject()方法返回一个Bean实例,使用ObjectFactory可以避免在容器启动时立即创建所有Bean,即只有在真正需要使用Bean时才会从Spring容器中获取该Bean实例,有助于性能优化。

1. ObjectFactory的使用场景

  • 懒加载Bean:当某个Bean的创建过程可能耗时较长或者依赖的资源较重时,可以通过ObjectFactory进行懒加载,避免容器启动时不必要的Bean创建。
  • 避免循环依赖:在某些情况下,两个Bean可能相互依赖,导致循环依赖问题,通过使用ObjectFactory,可以延迟其中一个Bean的创建,避免循环依赖。

8. Spring中的ApplicationContext是什么

ApplicationContext是Spring框架中的一个核心接口,代表了Spring IOC容器的高级形态,提供了比BeanFactory更丰富的功能和灵活性。他是Spring应用程序的核心,不仅负责创建和管理Bean,还提供了对Bean的全面管理以及对应用程序环境的支持。ApplicationContext继承自BeanFactory接口,并在此基础上进行了扩展,提供了更多的功能和特性,如事件传播、国际化支持、资源加载、生命周期回调等。

ApplicationContext的主要功能和特点包括:
Bean的管理:负责管理应用程序中的所有bean对象,包括他们的创建、配置、生命周期管理等。

资源的加载:可以加载和管理各种资源,如配置文件、xml文件、properties文件,提供了一个统一的接口方便开发者访问和使用资源。

国际化支持:提供国际化的支持,可以根据不同的语言环境加载不同的资源文件,实现多语言支持。

9. Spring Bean一共有几种作用域

  • singleton:默认单例
  • prototype:原型,多实例
  • request:每次请求新建一个属于自己的Bean
  • session:一个http session有一个bean实例
  • application:整个ServletContext生命周期里,只有一个bean,这种作用域仅存在Spring Web应用中
  • webSocket:一个WebSocket生命周期内一个bean实例

10. 什么是AOP

AOP(面向切面编程)是一种编程范式,用于将跨领域的关注点(如日志记录、安全检查、事务管理等)与业务逻辑分离开来,允许开发者通过“切面”将这些通用功能模块化,并将其应用到应用程序中的多个地方,从而避免代码重复。

  • 核心思想:AOP的核心思想是将和业务逻辑无关的横切关注点抽取出来,通过声明的方式动态的应用到业务方法上,而不是将代码直接嵌入业务逻辑中。
  • 主要组成部分:AOP包括几个关键概念:切面、连接点、通知、切入点和织入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

just-julie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值