Spring依赖注入的几种方式分享梳理总结

Spring依赖注入的几种方式分享梳理总结

什么是依赖注入(Dependency Injection,DI)

简单来说,依赖注入就是将对象所依赖的其他对象注入到其内部。这样可以达到解耦的效果,提高代码的可维护性。

通常,依赖注入需要依赖容器完成,目前比较常用的容器有Spring、Guice等。

Spring依赖注入的几种方式

1.构造注入(Constructor Injection)

构造注入就是通过构造函数的参数来进行注入,这种方式通常应用在有固定数量依赖的类中。

在Spring中,可以使用<constructor-arg>标签来进行配置注入参数。

示例代码:

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    //...
}
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>

<bean id="userService" class="com.example.service.UserServiceImpl">
    <constructor-arg ref="userDao"/>
</bean>

2.属性注入(Property Injection)

属性注入就是通过setter方法设置依赖属性的值,这种方式通常应用在有大量依赖的类中。

在Spring中,可以使用<property>标签来进行配置注入属性。

示例代码:

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    //...
}
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>

<bean id="userService" class="com.example.service.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>

3.接口注入(Interface Injection)

接口注入就是通过实现依赖注入接口来进行注入,这种方式通常应用在需要回调函数的类中。

在Spring中,可以使用<lookup-method>标签来进行配置注入回调函数。

示例代码:

public abstract class Command {
    public User getUser() {
        return UserServiceFactory.getUserService().getCurrentUser();
    }
}

public interface UserService {
    User getCurrentUser();
}

public class UserServiceImpl implements UserService {
    public User getCurrentUser() {
        //...
    }
}

public class UserServiceFactory {
    private static UserService userService;

    public void setUserService(UserService userService) {
        UserServiceFactory.userService = userService;
    }

    public static UserService getUserService() {
        return userService;
    }
}

<bean id="userService" class="com.example.service.UserServiceImpl"/>

<bean id="userServiceFactory" class="com.example.service.UserServiceFactory">
    <lookup-method name="setUserService" bean="userService"/>
</bean>

<bean id="command" abstract="true" class="com.example.web.Command"/>

<bean id="loginCommand" parent="command">
    <!-- ... -->
</bean>

结束语

以上就是Spring依赖注入的三种方式,每种方式都有其特点和适用场景。为了保证代码的可维护性和可扩展性,我们需要根据具体情况去选择不同的方式。

阅读剩余 60%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring依赖注入的几种方式分享梳理总结 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 让JPA的Query查询接口返回Map对象的方法

    要让JPA的Query查询接口返回Map对象,可以使用以下方法: 使用JPA自带的元模型(Metamodel)生成查询结果为Map的查询语句 通过Metamodel可以访问实体的属性,例如,对于一个名为User的实体,可以通过以下代码访问它的属性:User_.name 示例代码: CriteriaBuilder cb = entityManager.getC…

    Java 2023年5月20日
    00
  • mybatis分页效果实现代码

    下面我来详细讲解一下mybatis分页效果实现代码的完整攻略。 什么是mybatis分页? mybatis分页是指将查询出来的结果集分成一定数量的小部分,每次只显示其中的一部分,以此来获得更加良好的用户体验。在使用mybatis进行开发时,我们可以利用一些已有的插件或者自定义代码来实现mybatis分页。 基于插件实现mybatis分页 在mybatis中,…

    Java 2023年5月20日
    00
  • Java 数据库连接池Druid 的介绍

    下面我将详细讲解“Java 数据库连接池Druid 的介绍”,分为以下几个方面: Druid 简介 Druid 优势 Druid 的使用 实例演示 1. Druid 简介 Druid 是阿里巴巴开源的一个高效的数据库连接池框架,其功能全面,性能优异,使用方便。Druid 官方提供了界面功能,可以监控数据库连接和 SQL 调用等信息。 Druid 提供以下功能…

    Java 2023年5月19日
    00
  • Java8 新特性Lambda表达式实例详解

    Java8 新特性Lambda表达式实例详解 Java8 新特性Lambda表达式,是一个非常强大的工具。它可以让我们编写出更加简洁清晰易懂的代码,并且大大提高了代码编写的效率。在本文中,我将详细讲解Lambda表达式的语法和使用方法,并通过两个实例帮助您更好地理解这个新特性。 Lambda表达式的语法 Lambda表达式的语法非常简单,它由三个部分构成:参…

    Java 2023年5月26日
    00
  • Sprint Boot @Qualifier使用方法详解

    在Spring Boot中,@Qualifier注解用于指定依赖注入的具体实现类。本文将详细介绍@Qualifier注解的作用和使用方法,并提供两个示例。 @Qualifier注解的作用 在Spring Boot中,当存在多个实现类时,使用@Qualifier注解可以指定依赖注入的具体实现类。使用@Qualifier注解,可以避免依赖注入时出现歧义,确保注入…

    Java 2023年5月5日
    00
  • Java编程中二维数组的初始化和基本操作实例

    Java编程中二维数组的初始化和基本操作实例 什么是二维数组? 在Java中,数组是一种引用数据类型。如果数组的元素也是数组,那么这个数组就称为二维数组。二维数组实际上就是一个包含其他数组的数组,对于一个二维数组,我们可以把它想象成一个表格,其中每一个元素都有行和列的下标来确定它的位置。 如何初始化二维数组? 在 Java 中,我们可以使用两种方式来初始化一…

    Java 2023年5月26日
    00
  • 使用Criteria进行分组求和、排序、模糊查询的实例

    下面我将为你详细讲解使用Criteria进行分组求和、排序、模糊查询的完整攻略。 一、Criteria的概述 Hibernate 中的 Criteria 查询是为了解决 HQL 表达式中所没有解决的灵活的高级查询,也可以免去写 SQL 的烦恼,使用标准的方式,所有的查询条件都封装成一个对象。 Criteria 对象可以通过 Restrictions 的静态方…

    Java 2023年5月20日
    00
  • 详解SpringBoot自定义配置与整合Druid

    详解SpringBoot自定义配置与整合Druid 本文将详细介绍如何在SpringBoot项目中自定义配置和整合Druid数据源。在本文中,我们将使用SpringBoot 2.x版本和Druid 1.1.10版本。 1. 自定义配置 在SpringBoot项目中,我们可以通过自定义配置文件来配置应用程序的各种属性。SpringBoot支持多种配置文件格式,…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部