📄️ Spring有哪些常用注解?
本篇文章主要还是围绕 spring-context 模块中 Bean 配置相关的注解、少量 spring-beans 和 spring-tx 模块的注解展开。
📄️ Spring-Web有哪些常用注解?
本篇文章主要还是围绕 spring-web 模块中的注解展开。
📄️ Spring依赖注入有哪些常用注解?
本篇文章主要还是围绕 spring-context 模块中的注解展开。
📄️ Spring配置上下文有哪些常用注解?
本篇文章主要还是围绕 spring-contexts 模块中的注解展开。
📄️ 什么是IOC?什么是DI?
IOC 即控制反转(Inversion of Control),它是一种设计原则,它强调将对象之间的依赖关系的控制权交给容器来管理。DI 即依赖注入(Dependency Injection),它是 IOC 的一种实现方式。
📄️ Spring的组合注解是什么?
Java 原生的注解不支持继承,而 Spring 通过一套组合注解机制实现了类似的功能。
📄️ @Configuration和@Component有什么区别?
Configuration 是基于 Component 的组合注解,它们都能实现一些类似的功能:将被注解的类声明为 Spring 容器中的 Bean。内部带有 Bean 注解的工厂方法返回的对象,都会被视为 Spring 容器中的 Bean。
📄️ Spring容器的启动过程?
Spring 容器的启动过程实际上就是 AbstractApplicationContext 抽象类中 refresh 方法的执行过程,不考虑异常情况,一个容器正常启动的过程大致可以分为以下五个阶段……
📄️ 什么是BeanFactory?
BeanFactory 是 Spring 中用于管理 Bean 生命周期的核心组件,Spring 官方文档将其称为 IOC 容器,它即是我们一般俗称的 “Spring 容器”。
📄️ 什么是FactoryBean?
Spring 中的 FactoryBean 是一个特殊的接口,实现了该接口的 Bean 变为专门用来创建某种特定类型对象的工厂。
📄️ BeanFactory和FactoryBean有什么区别?
BeanFactory 是 Spring 容器的顶级接口,它表示 Spring 框架中用于管理 Bean 生命周期的核心组件,被官方称为 IOC 容器。而FactoryBean 也是 Spring 提供的接口,实现了这个接口的 Bean……
📄️ 什么是三级缓存?为什么需要?
当我们说起 Spring 的三级缓存,一般指的是 Spring 单例注册表 DefaultSingletonBeanRegistry 中的三个本地缓存……
📄️ Spring的懒加载和延迟注入是什么?两者有何区别?
懒加载可以避免 Spring 容器启动时“主动”触发 Bean 的加载,而延迟注入可以避免 Bean 因为被其他加载的 Bean 依赖而“被动”触发加载,那么当两者同时配置时,才能实现真正的懒加载。
📄️ @Autowired和@Resource有何区别?
Autowired 和 Resource 都是在 Spring 里比较常用的依赖注入注解,两者都支持属性注入、构造器注入和 Setter 方法注入三种主要的注入模式,也都支持 Spring 的组合注解机制。
📄️ 不被Spring管理的对象也能进行依赖注入吗?
一般情况下,我们总是在被 Spring 容器管理的 Bean 里面使用依赖注入,不过在一些特定的情况下,我们也会需要在不被 Spring 管理的对象中访问 Spring 容器,或者进行依赖注入……
📄️ Bean的生命周期?
总的来说,如果不考虑 BeanDefinition,那么 Bean 的生命周期可以分为四个阶段:实例化阶段、依赖注入阶段、初始化阶段、销毁阶段……
📄️ Bean是线程安全的吗?
Spring 创建 Bean 的过程会加锁,因此 Spring 本身保证创建 Bean 的过程是线程安全的。基于这个前提,我们实际讨论的是 Spring 管理的 Bean 在使用过程中是否是线程安全的,这个问题取决于 Bean 的作用域、Bean 本身是否有状态,以及 Bean 本身是否提供了线程安全的操作机制。
📄️ Bean的作用域是什么?有哪些作用域?
作用域即 Bean 的 Scope,它表示被 Spring 容器管理的 Bean 的生命周期。简单的来说,就是一个 Bean 在什么范围内有效。比如一个 Bean 只在 Request 范围内有效,那么一次请求完毕后将无法再从 Spring 容器中获得它。
📄️ SpringAOP有哪些核心组件?
在 SpringAOP 中,一切基于 AOP 实现的增强逻辑都以一个 Advisor 作为基本单位。这个顶级接口从字面上直译为通知器。在通常情况下,我们只会接触到它的两个子类:切点通知器 PointcutAdvisor 和引介通知器 IntroductionInfo。
📄️ JDK代理和CGLib代理的区别?
JDK 代理和 CGLib 代理都是 Spring 默认支持的代理模式,在默认情况下,Spring 会优先使用 JDK 代理,不过如目标类没有实现一个公共接口,那就会基于 CGLib 进行代理。