2021-05-29

Spring 依赖注入的两种实现方式

依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。

当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new 关键字获得被调用者实例),而使用 Spring 框架后,被调用者的实例不再由调用者创建,而是由 Spring 容器创建,这称为控制反转。

Spring 容器在创建被调用者的实例时,会自动将调用者需要的对象实例注入给调用者,这样,调用者通过 Spring 容器获得被调用者实例,这称为依赖注入。

依赖注入主要有两种实现方式,分别是属性 setter 注入和构造方法注入。具体介绍如下。

1)属性 setter 注入

指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。

2)构造方法注入

指 IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。

下面通过属性 setter 注入的案例演示 Spring 容器是如何实现依赖注入的。具体步骤如下。

1. 创建 IUserService 接口

在 SpringDemo1 项目的 com.liuhao.service 包下创建一个名为 IUserService 的接口,该接口中包含一个 add() 方法,如下所示。

1 package com.liuhao.service;2 public interface IUserService {3  public void add();4 }

2. 创建接口实现类 UserServiceImpl

在 com.liuhao.service 包下创建一个名为 UserServiceImpl 的类,该类实现了 IUserService 接口,如下所示。

 1 package com.liuhao.service; 2 public class UserServiceImpl implements IUserService { 3  // 定义接口声明 4  private IUserDao userDao; 5  // 提供set()方法,用于依赖注入 6  public void setUserDao(IUserDao userDao) { 7   this.userDao = userDao; 8  } 9  // 实现IUserService接口的方法10  @Override11  public void add() {12   userDao.add(); // 调用IUserDao中的add()方法13   System.out.println("调用Service层add方法成功!!!");14  }15 }

上述代码中,首先声明了 userDao 对象,并为其添加 setter 方法,用于依赖注入,然后实现了 IUserDao 接口的 add() 方法,并在方法中调用 add() 方法和输出一条语句。

3. 在 applicationContext.

在 applicationContext.

1 <bean id="userService" class="com.liuhao.service.UserServiceImpl">2  <!-- 将userDao实例注入userService实例中 -->3  <property name="userDao" ref="userDao"/>4 </bean>

4. 编写测试方法

在 Test 类编辑后如下所示:

 1 package com.liuhao.dao; 2  3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPath 5  6 public class Test { 7  8  public static void main(String[] args) { 9   // 创建 ioc 容器 ,加载配置文件10   ApplicationContext context = new ClassPath);11   // 通过容器获取userService实例12   IUserService userService = (IUserService) context.getBean("userService");13   // 调用userService的add()方法14   userService.add();15  }16 17 }

5. 运行项目并查看结果

运行成功后,控制台的输出结果如图所示。

从图的输出结果中可以看出,使用 Spring 容器获取 userService 的实例后,调用了该实例的 add() 方法,在该方法中又调用了 IUserDao 实现类中的 add() 方法,并输出了结果。这就是 Spring 容器属性 setter 注入的方式,也是实际开发中较为常用的一种方式。









原文转载:http://www.shaoqun.com/a/767946.html

跨境电商:https://www.ikjzd.com/

二类电商:https://www.ikjzd.com/w/1457

c88:https://www.ikjzd.com/w/1017.html


依赖注入(DependencyInjection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念。当某个Java实例需要另一个Java实例时,传统的方法是由调用者创建被调用者的实例(例如,使用new关键字获得被调用者实例),而使用Spring框架后,被调用者的实例不再由调用者创建,而是由Spring容器创建,这称为控制反转。Spring容器在创建被调用者的实例时,会自动将调用者需要的对
上海跨境通:https://www.ikjzd.com/w/1329
跨境通网站:https://www.ikjzd.com/w/1329
心怡物流:https://www.ikjzd.com/w/1327
雷人90后女友 要我拍她堕胎全纪录:http://www.30bags.com/m/a/253796.html
营收85亿!巨星科技发布2020年度业绩快报:https://www.ikjzd.com/articles/142819
买买买!亚马逊海外购史上最长"真黑五"全球狂欢重磅登场!:https://www.ikjzd.com/articles/134151

No comments:

Post a Comment