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

yizhihongxing

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日

相关文章

  • Java Apache Commons报错“IllegalArgumentException”的原因与解决方法

    当使用Java的Apache Commons类库时,可能会遇到“IllegalArgumentException”错误。这个错误通常由以下原因之一起: 参数错误:如果参数错误,则可能会出现此错误。在这种情况下,需要检查参数以解决此问题。 方法调用错误:如果方法调用错误,则可能会出现此错误。在这种情况下,需要检查方法调用以解决此问题。 以下是两个实例: 例1 …

    Java 2023年5月5日
    00
  • java web手写实现分页功能

    下面是“Java Web手写实现分页功能”的详细攻略: 1. 前置知识 在手写实现分页功能之前,需要掌握以下知识: JDBC,用于操作数据库 Servlet,用于接收请求和响应数据 JSP,用于在页面上呈现数据 HTML/CSS,用于美化页面 2. 实现思路 根据用户请求的当前页数和每页显示记录数,计算出查询的起始位置和结束位置 使用JDBC从数据库中查询数…

    Java 2023年6月15日
    00
  • Java模拟多线程实现抢票代码实例

    以下是关于“Java模拟多线程实现抢票代码实例”的详细攻略: 什么是多线程 多线程是指在同一程序中,多个线程同时运行,实现多个任务同时执行的一种编程方式。在Java中,线程是比进程更小的执行单元,每个线程都可以独立地运行和完成自己的任务。 实现多线程的两种方式 继承Thread类 通过继承Thread类并重写它的run()方法来实现多线程。重写run()方法…

    Java 2023年5月18日
    00
  • MyBatis-Plus使用ActiveRecord(AR)实现CRUD

    下面是关于“MyBatis-Plus使用ActiveRecord(AR)实现CRUD”的完整攻略: 什么是MyBatis-Plus的ActiveRecord(AR) MyBatis-Plus是一个MyBatis的优秀增强工具,比MyBatis更加强大、方便、强大、灵活,其AR模式是一种ORM思想,使得你可以通过链式调用方法完成CRUD操作,减少了编写重复的S…

    Java 2023年5月26日
    00
  • Hibernate初体验及简单错误排除代码详解

    Hibernate初体验及简单错误排除代码详解 概述 Hibernate是一个开源的Java ORM框架,用于将Java中的对象映射到关系型数据库中的表中。使用Hibernate可以大大提高开发效率和代码可维护性。 本篇攻略将介绍如何在Java项目中使用Hibernate,并提供简单错误排除代码详解。 环境准备 在开始使用Hibernate之前,需要具备以下…

    Java 2023年5月20日
    00
  • Java中字符数组、String类、StringBuffer三者之间相互转换

    Java中字符数组、String类、StringBuffer三者之间可以互相转换,下面分别介绍其转换方法。 1、字符数组与String类之间的转换 1.1、字符数组转String char[] charArray = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’}; String str = new String(charArray); 1.2、Stri…

    Java 2023年5月27日
    00
  • struts中动态方法调用使用通配符

    在Struts框架中,可以通过动态方法调用使用通配符的方式,实现对请求URL的自动解析,从而找到对应的Action类及其方法进行处理。 以下是使用通配符的完整攻略: 1. 配置struts.xml 在struts.xml中,可以配置动态方法调用的命名空间及通配符等参数。如下所示: <package name="example" na…

    Java 2023年5月20日
    00
  • 学习SpringMVC——国际化+上传+下载详解

    以下是关于“学习SpringMVC——国际化+上传+下载详解”的完整攻略,其中包含两个示例。 学习SpringMVC——国际化+上传+下载详解 SpringMVC是一种常用的Web开发框架,它提供了许多有用的功能,如国际化、文件上传和下载等。在本文中,我们将讲解如何在SpringMVC中实现国际化、文件上传和下载功能。 国际化 国际化是一种将应用程序适应不同…

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