interview
backend-classic
有哪些注解可以注入Bean?@Autowired和@Resource的区别?

后端经典面试题合集, 有哪些注解可以注入 Bean?@Autowired 和 @Resource 的区别?

后端经典面试题合集, 有哪些注解可以注入 Bean?@Autowired 和 @Resource 的区别?

QA

Step 1

Q:: 有哪些注解可以注入 Bean?

A:: 在 Spring 框架中,以下注解可以用来注入 Bean: 1. @Autowired:用于自动注入 Spring 管理的 Bean。 2. @Resource:根据名称或类型注入 Bean,可以指定具体的 Bean 名称。 3. @Inject:Java 标准的注入注解,功能类似于 @Autowired。 4. @Value:注入基本类型的值,通常用于注入配置文件中的值。 5. @Qualifier:与 @Autowired 或 @Inject 搭配使用,指定注入的具体 Bean。

Step 2

Q:: @Autowired 和 @Resource 的区别?

A:: @Autowired 和 @Resource 都用于注入依赖,但它们有一些关键区别: 1. 来源不同:@Autowired 是 Spring 框架提供的注解,而 @Resource 是 JSR-250 规范中的注解。 2. 注入方式:@Autowired 默认按类型注入,可以与 @Qualifier 结合按名称注入;@Resource 默认按名称注入,如果名称匹配失败则按类型注入。 3. 兼容性:@Resource 适用于 Java EE 和 Spring 项目,@Autowired 主要用于 Spring 项目。

Step 3

Q:: 如何使用 @Qualifier?

A:: @Qualifier 注解用于在存在多个同类型 Bean 时,指定需要注入的具体 Bean。通常与 @Autowired 一起使用,示例代码如下:

 
@Autowired
@Qualifier("specificBeanName")
private MyBean myBean;
 

这里 @Qualifier("specificBeanName") 表示注入名称为 'specificBeanName' 的 Bean。

Step 4

Q:: Spring 中的依赖注入有哪些方式?

A:: Spring 中主要有三种依赖注入方式: 1. 构造函数注入:通过构造函数将依赖传递给 Bean。 2. Setter 方法注入:通过 Setter 方法将依赖注入到 Bean 中。 3. 接口注入(较少使用):通过实现特定接口进行依赖注入。

Step 5

Q:: 什么是 Spring 的 IoC 容器?

A:: Spring 的 IoC(Inversion of Control,控制反转)容器是管理 Bean 生命周期和依赖注入的核心组件。IoC 容器通过配置元数据(如 XML 文件或注解)创建、配置和管理对象(Bean),并自动处理对象之间的依赖关系。

用途

这些问题涉及 Spring 框架中最基础的依赖注入机制,这些注解和机制广泛应用于实际生产环境中,用于管理 Bean 的创建和依赖关系。理解这些内容有助于开发人员有效地设计和管理复杂的应用程序架构,尤其是在微服务架构中,不同服务之间的依赖关系变得非常重要。因此,这些问题被面试官频繁提问以评估候选人对 Spring 框架的掌握程度。\n

相关问题

🦆
Spring Boot 如何自动配置 Bean?

Spring Boot 提供了自动配置功能,通过 @EnableAutoConfiguration 或 @SpringBootApplication 注解,可以扫描并自动配置符合条件的 Bean。它极大简化了 Spring 应用程序的开发,减少了配置的复杂度。

🦆
什么是 Spring 的 AOP面向切面编程?

AOP 是 Spring 框架的一部分,用于处理跨领域的关注点(如日志记录、事务管理等)。AOP 允许将这些关注点从业务逻辑中分离出来,增强代码的可维护性和可读性。

🦆
Spring 中如何管理事务?

Spring 提供了声明式和编程式两种事务管理方式。声明式事务管理是通过 @Transactional 注解来实现,编程式事务管理则是通过 TransactionTemplate 或 PlatformTransactionManager 手动管理。

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

Spring 管理的 Bean 具有特定的生命周期,包括实例化、依赖注入、初始化、销毁等阶段。可以通过实现 InitializingBean 和 DisposableBean 接口,或使用 @PostConstruct 和 @PreDestroy 注解来自定义初始化和销毁逻辑。