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依赖注入的三种方式,每种方式都有其特点和适用场景。为了保证代码的可维护性和可扩展性,我们需要根据具体情况去选择不同的方式。

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

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

相关文章

  • springboot启动feign项目报错:Service id not legal hostnam的解决

    下面是解决“springboot启动feign项目报错:Service id not legal hostname”的完整攻略。 问题描述 在使用Spring Boot启动Feign项目时,可能会出现以下报错信息: java.lang.IllegalArgumentException: Service id not legal hostname ([服务名]…

    Java 2023年5月20日
    00
  • maven scope provided和runtime的例子说明

    Maven是Java项目中十分常用的构建工具,它提供了一系列功能和机制来管理项目中的依赖。Maven中的“scope”是指依赖范围,即描述一个依赖在何种情况下可用的属性。Maven中常用的依赖范围主要有compile、provided、runtime、test和system。 其中,provided和runtime经常一起使用,我们来详细讲解一下它们的区别和…

    Java 2023年6月2日
    00
  • java实现图片上传至本地实例详解

    Java实现图片上传至本地实例详解 在Web开发中,经常会遇到用户需要上传图片的需求。本文将详细讲解Java如何实现图片上传至本地的操作。 基本原理 实现图片上传的基本原理是将客户端上传的二进制数据流保存到服务器端的某个文件夹中,然后将图片的URL返回给客户端,客户端通过URL获取到图片并显示。 实现步骤 创建一个上传文件的表单,设置enctype属性为“m…

    Java 2023年5月19日
    00
  • Jackson2的JsonSchema实现java实体类生成json方式

    当使用Jackson2进行Java对象的序列化和反序列化时,我们可以使用Jackson2的JsonSchema功能来生成Java实体类的JSON描述。这些描述包括属性的标识符、类型和其他约束。它们可以用于生成文档、验证和其他用途。 以下是使用Jackson2的JsonSchema生成Java实体类的步骤: 步骤1. 添加依赖 要使用Jackson2的Json…

    Java 2023年5月26日
    00
  • 如何使用Java Security Manager?

    如何使用Java SecurityManager? Java SecurityManager 是一个Java安全工具,可以允许或禁止Java应用程序执行某些操作。本文将为您详细讲解如何使用Java SecurityManager,包括设置SecurityManager,创建权限策略文件,以及使用示例说明。 1. 设置SecurityManager 首先,要想…

    Java 2023年5月11日
    00
  • Springboot集成kafka高级应用实战分享

    为了让大家更好地理解 Springboot 集成 kafka 的应用,我将分别从以下几个部分展开: 环境准备 Springboot 集成 kafka 配置 生产者示例 消费者示例 1. 环境准备 首先需要确保已经正确安装了 Kafka,JDK和 Maven。然后在 pom.xml 文件中引入 Kafka client 相关依赖: <dependenci…

    Java 2023年5月20日
    00
  • Python模拟登录验证码(代码简单)

    下面是Python模拟登录验证码的完整攻略: 环境准备 首先要确保电脑上已经安装了Python 3.x版本,并且安装了requests和Pillow库,可以使用以下命令进行安装: pip install requests pip install Pillow 获取验证码图片并保存到本地 首先需要使用requests库向目标网站发送请求,获取验证码图片的二进制…

    Java 2023年6月16日
    00
  • Java调用Python脚本传递数据并返回计算结果

    Java调用Python脚本并传递数据可以通过Java的ProcessBuilder类,在Java程序中启动Python脚本进程。同时,可以通过标准输入和标准输出进行数据传递。具体步骤如下: 1.编写Python脚本 首先,需要编写Python脚本来处理接收到的数据,并返回计算结果。例如: import sys data = sys.stdin.read()…

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