interview
spring
Spring Bean 注入容器有哪些方式

Spring 面试题, Spring Bean 注入容器有哪些方式?

Spring 面试题, Spring Bean 注入容器有哪些方式?

QA

Step 1

Q:: Spring Bean 注入容器有哪些方式?

A:: Spring Bean 注入容器主要有三种方式:1) 构造函数注入:通过类的构造函数将依赖项注入Bean中。2) Setter方法注入:通过Bean的Setter方法注入依赖项。3) 注解方式注入:使用@Autowired, @Inject或@Resource注解将依赖项注入Bean中。注解方式是最常用且灵活的注入方式。

Step 2

Q:: 构造函数注入和Setter方法注入的区别是什么?

A:: 构造函数注入在Bean实例化时必须提供所有的依赖,适合于必须的依赖项,保证依赖不可变性。Setter方法注入允许在Bean实例化后注入依赖,适合于可选的依赖项,但依赖项可能在运行时被修改。构造函数注入有助于实现不可变对象,减少错误。

Step 3

Q:: 什么是@Primary注解,什么时候使用?

A:: @Primary注解用于指定多个同类型Bean中哪个Bean应该优先注入。通常用于避免因同类型的多个Bean注入导致的歧义性问题。当没有特别指定Bean时,Spring会优先选择标注了@Primary的Bean。

Step 4

Q:: 如何处理Spring中的循环依赖?

A:: Spring通过三级缓存解决循环依赖问题。1) 一级缓存存储完全初始化的单例Bean,2) 二级缓存存储实例化但未注入依赖的单例Bean,3) 三级缓存存储实例化且暴露了代理对象的单例Bean。当A依赖B,B又依赖A时,Spring能够通过缓存中的代理对象解决循环依赖问题。构造函数注入无法解决循环依赖,必须使用Setter注入或字段注入。

用途

Spring Bean注入是Spring框架的核心特性之一,它决定了应用程序中依赖的管理方式。面试中问及这些问题,目的是评估候选人对依赖注入模式、依赖管理的理解程度,以及如何通过不同的方式实现松耦合、增强可测试性和可维护性。在生产环境中,选择合适的注入方式可以提升应用程序的灵活性、扩展性,同时避免常见的错误如循环依赖等。\n

相关问题

🦆
Spring中的依赖注入与依赖查找有何区别?

依赖注入是由容器主动将依赖注入到Bean中,而依赖查找是由Bean主动向容器查询依赖。依赖注入是一种被动的方式,Bean无需知道容器的存在,而依赖查找则需要Bean与容器耦合。依赖注入更符合面向对象设计中的控制反转(IoC)原则。

🦆
Spring Bean的生命周期是什么?

Spring Bean的生命周期包括以下几个阶段:1) 实例化:通过构造器创建对象,2) 属性注入:通过Setter或字段注入依赖,3) 初始化:调用init-method或@PostConstruct注解标记的方法,4) 使用:Bean可以被应用程序使用,5) 销毁:容器关闭时调用destroy-method或@PreDestroy注解标记的方法。理解Bean的生命周期有助于在适当的时机执行资源管理、事务处理等操作。

🦆
如何在Spring中实现Bean的作用域Scope?

Spring Bean的作用域定义了Bean的生命周期及其在容器中的实例化策略。常见的作用域包括:1) singleton:默认作用域,每个Spring容器中只创建一个实例,2) prototype:每次请求都会创建一个新的实例,3) request:每个HTTP请求创建一个实例,4) session:每个HTTP会话创建一个实例,5) application:每个ServletContext创建一个实例。理解作用域有助于在开发中优化资源使用并确保线程安全。

🦆
Spring的@Qualifier注解有什么作用?

@Qualifier注解用于在存在多个相同类型的Bean时指定注入哪个Bean。与@Autowired结合使用,解决依赖注入中的歧义性问题。当有多个Bean可供注入,且这些Bean未标记@Primary时,@Qualifier通过Bean名称明确指定需要注入的Bean。