开发者

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

目录
  • 一、什么是依赖注入(DI)?
    • 1. 定义
    • 2. 举个例子
  • 二、依赖注入的几种方式
    • 1. 构造器注入(Constructor Injection)
    • 2. Setter 注入(Setter Injection)
    • 3. 字段注入(Fiepythonld Injection)—— 使用@Autowired
  • 三、@Autowired和@Value的区别
    • 示例:
      • ✅ 引用类型注入(用@Autowired)
      • ✅ 简单类型注入(用@Value)
  • 四、在@Bean方法中如何注入依赖?
    • 说明:
    • 五、总结
      • 方法参数注入和@Autowired注入区别
        • ✅ 两种引用类型依赖注入方式对比
          • 通俗理解
            • 1.方法参数注入(如@Bean方法中)
              • 2.字段注入(使用@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.devze.comd
              @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.devze.com方法参数注入(如@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依赖注入内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

              0

              上一篇:

              下一篇:

              精彩评论

              暂无评论...
              验证码 换一张
              取 消

              最新开发

              开发排行榜