java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring依赖注入

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

作者:{⌐■_■}

文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入Bean)与@Value(注入简单类型)的用途,并说明@Bean方法参数可自动装配依赖,无需显式注解,感兴趣的朋友跟随小编一起看看吧

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

1. 定义

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

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

2. 举个例子

比如:

public class BookService {
    private BookDao bookDao;
}

这里 BookService 依赖于 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) { // 引用类型直接添加形参
    ...
}

说明:

五、总结

问题回答
什么是依赖注入?Spring 自动帮你把需要的对象注入进来
怎么使用?构造器、Setter、字段注入(@Autowired
@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.方法参数注入(如@Bean方法中)

@Bean
public DataSource dataSource(BookDao bookDao) {
    ...
}

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

@Component
public class BookService {
    @Autowired
    private BookDao bookDao;
}

https://github.com/0voice

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

您可能感兴趣的文章:
阅读全文