Java Spring的依赖注入理解及@Autowired用法示例详解

2025-07-23 20:50

本文主要是介绍Java Spring的依赖注入理解及@Autowired用法示例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入...

一、什么是依赖注入(DI)?

1. 定义

依赖注入(Dependency Injection) 是 Spring 框架的核心功能之一,它指的是:

由 Spring 容器来管理对象之间的依赖关系,并自动将依赖对象注入到目标对象中。

2. 举个例子

比如:

public class BookService {
    private BookDao bookDao;
}

这里 BookServicephp赖于 BookDao,如果手动创建:

BookDao bookDao = new BookDaoImpl();
BookService service = new BookService(bookDao);

而使用 Spring 后,你只需要告诉 Spring:

“我需要一个 BookDao,你帮我自动注入进来。”

Spring 会自动完成这个过程。

二、依赖注入的几种方式

1. 构造器注入(Constructor Injection)

public class BookService {
    private final BookDao bookDao;
    public BookService(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

2. Setter 注入(Setter Injection)

public class BookService {
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

3. 字段注入(Field Injection)—— 使用@Autowired

public class BookService {
    @Autowired
    private BookDao bookDao;
}

⚠️ 注意:字段注入虽然方便,但不利于测试和维护,推荐使用构造器注入

三、@Autowired和@Value的区别

注解用途注入类型
@Autowired注入 Spring 容器中的 Bean 对象引用类型(如 Bean)
@Value注入基本类型、字符串、SpEL 表达式简单类型(如 String、int)

示例:

✅ 引用类型注入(用@Autowired)

public class BookService {
    @Autowired
    private BookDao bookDao; // 注入一个 Bean
}

✅ 简单类型注入(用@Value)

public class AppConfig {
    @Value("com.mysql.jdbc.Driver")
    private String driver;
}

四、在@Bean方法中如何注入依赖?

你提到的这段代码:

@Bean
public DataSource dataSource(BookDao bookDao) { // 引用类型直接添加形参
    ...
}

说明:

  • 这是 基于 Java 配置类 的方式定义 Bean。
  • Spring 会自动将BookDao类型的 Bean 注入进来。
  • 不需要再写 @Autowired,因为 Spring 会自动根据类型进行装配。

五、总结

问题回答
什么是依赖注入?Spring 自动帮你把需要的对象注入进来
怎么使用?构造器、Setter、字段注入(@Autowirewww.chinasem.cnd
@Autowired 是干嘛的?注入引用类型(Bean)
@Value 是干嘛的?注入简单类型(字符串、数字等)
为什么 @Bean 方法里可以直接加形参?Spring 会根据类型自动装配
@Autowired 这里不能用吗?@Bean 方法参数中不需要,因为 Spring 自动装配了

方法参数注入和@Autowired注入区别

  • 方法参数注入:用于在某个方法内部临时使用一个 Bean,比如定义 @Bean
  • @Autowired 字段注入:用于把 Bean 绑定到类中,整个类都可以用。

✅ 两种引用类型依赖注入方式对比

方式注解使用位置说明示例
构造器/方法参数注入无(Spring 自动装配)@Bean 方法参数 / 构造器参数Spring 会根据类型自动将依赖注入到方法参数中public DataSource dataSource(BookDao bookDao)
字段注入 / 成员变量注入@Autowired类成员变量Spring 会自动将 Bean 注入到字段上@Autowired private BookDao bookDao;

通俗理解

1.http://www.chinasem.cn方法参数注入(如@Bean方法中)

@Bean
public DataSource dataSource(BookDao bookDao) {
    ...
}
  • Spring 会自动把已经注册的BookDao Bean 注入到这个方法参数中。
  • 这是一种 临时使用依赖 的方式,适合在配置类中定义 Bean 时使用。
  • 不需要 @Autowired,Spring 会自动完成注入。

2.字段注入(使用@Autowired)

@Component
public class BookService {
    @Autowired
    private BookDao bookDao;
}
  • 这是 把依赖绑定到类本身,类的整个生命周期都可以使用这个依赖。
  • 适用于业务组件、Service、Controller 等类中。
  • 必须使用 @Autowired 来告诉 Spring 要注入什么。

https://gitphphub.com/0voice

到此这篇关于Java Spring的依赖注入理解及@Autowired用法示例详解的文章就介绍到这了,更多相关spring依赖注入内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Java Spring的依赖注入理解及@Autowired用法示例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155464

相关文章

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder