Spring 依赖注入实现示例

下面我将详细讲解“Spring 依赖注入实现示例”的完整攻略。

简介

在 Spring 中,依赖注入是一种通过引入 bean,或者在文件中定义配置信息,Spring 就能自动地初始化一个类的实例,并注入到另一个类的属性中的方式。Spring 的依赖注入实现基于反射技术,可以极大地简化代码的编写,并且能够有效地降低耦合度。

基本用法

Spring 的依赖注入有三种基本方法:

  • Setter 注入
  • 构造函数注入
  • 字段注入

下面我们来分别说明这三种方法的基本使用方法。

Setter 注入

Setter 注入是通过调用目标类的 setter 方法来进行依赖注入的。这种方式需要在类中添加相应的 setter 方法,并且需要在 Spring 配置文件中定义 bean,并在属性中使用 ref 来引用其他 bean。

例如:

public class Example {
    private Dependency dependency;

    public void setDependency(Dependency dependency) {
        this.dependency = dependency;
    }

    // ...
}
<bean id="example" class="example.Example">
    <property name="dependency" ref="dependency"/>
</bean>

<bean id="dependency" class="example.Dependency">
    <!-- dependency 的属性 -->
</bean>

Setter 注入的优点是可以很方便地在类中添加或移除依赖,但缺点是该方法需要写代码来进行注入,需要编写大量重复的 setter 方法。

构造函数注入

构造函数注入是通过调用目标类的构造函数来进行依赖注入的。这种方式需要在类中添加相应的构造函数,并且需要在 Spring 配置文件中定义 bean,并在属性中使用 ref 来引用其他 bean。

例如:

public class Example {
    private Dependency dependency;

    public Example(Dependency dependency) {
        this.dependency = dependency;
    }

    // ...
}
<bean id="example" class="example.Example">
    <constructor-arg ref="dependency"/>
</bean>

<bean id="dependency" class="example.Dependency">
    <!-- dependency 的属性 -->
</bean>

构造函数注入的优点是可以创建不可变的依赖,但缺点是需要编写大量重复的构造函数。

字段注入

字段注入是通过直接设置目标类的属性来进行依赖注入的。这种方式需要在类中添加相应的属性,并且需要在 Spring 配置文件中定义 bean,并在属性中使用 ref 来引用其他 bean。

例如:

public class Example {
    @Autowired
    private Dependency dependency;

    // ...
}
<bean id="example" class="example.Example"/>

<bean id="dependency" class="example.Dependency">
    <!-- dependency 的属性 -->
</bean>

字段注入的优点是代码量少,但缺点是该方式会让类与 Spring 容器之间产生耦合。

示例

下面给出两个实例来说明 Spring 的依赖注入的用法。

示例一:基本使用

首先创建一个简单的程序,包含两个类:Hello 和 MessagePrinter。Hello 类用于封装一个打印消息的字符串,MessagePrinter 类用于打印 Hello 类封装的消息。它们的代码如下:

public class Hello {
    private String message = "Hello, World!";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
public class MessagePrinter {
    private Hello hello;

    public void printMessage() {
        System.out.println(hello.getMessage());
    }

    public Hello getHello() {
        return hello;
    }

    public void setHello(Hello hello) {
        this.hello = hello;
    }
}

接下来我们需要在 Spring 配置文件中定义 Hello 和 MessagePrinter 的 bean,并且将它们关联起来:

<bean id="hello" class="example.Hello">
    <property name="message" value="Hello, Spring!"/>
</bean>

<bean id="printer" class="example.MessagePrinter">
    <property name="hello" ref="hello"/>
</bean>

最后我们通过创建一个 ApplicationContext 实例来获取 MessagePrinter 实例,并调用它的 printMessage 方法:

ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
MessagePrinter printer = context.getBean("printer", MessagePrinter.class);
printer.printMessage();

代码中,我们通过读取配置文件 config.xml 来创建 ApplicationContext 实例,然后通过 getBean 方法获取 MessagePrinter 实例,最后调用 printMessage 方法输出消息。

示例二:使用注解

除了上面介绍的 XML 配置方式外,Spring 还提供了注解方式来进行依赖注入。注解方式代码更加简洁,但使用需要注意一些细节。

首先我们需要在 MessagePrinter 类中添加 @Autowired 注解:

public class MessagePrinter {
    @Autowired
    private Hello hello;

    public void printMessage() {
        System.out.println(hello.getMessage());
    }

    // ...
}

然后我们需要在 Spring 配置文件中声明 MessagePrinter 和 Hello 的 bean,并且使用 标签来启用注解:

<bean id="hello" class="example.Hello">
    <property name="message" value="Hello, Spring!"/>
</bean>

<bean id="printer" class="example.MessagePrinter"/>

<context:annotation-config/>

这里的 标签可以自动扫描注解,并且创建与之匹配的 bean,非常方便。最后我们可以在代码中创建 ApplicationContext 实例,并通过 getBean 方法获取 MessagePrinter 实例,调用 printMessage 方法输出消息。

代码如下:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
    MessagePrinter printer = context.getBean(MessagePrinter.class);
    printer.printMessage();
}

这里需要注意,我们通过 context.getBean(MessagePrinter.class) 获取 MessagePrinter 实例时,Spring 会自动扫描 @Autowired 注解,并创建 bean。因此我们要保证 MessagePrinter 只有一个构造函数或者只有一个有 @Autowired 注解的构造函数。

至此,我们已经完成了 Spring 依赖注入实现示例的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring 依赖注入实现示例 - Python技术站

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

相关文章

  • 基于Java 谈回调函数

    下面为您详细讲解基于Java的回调函数。 什么是回调函数? 回调函数是一种常用的编程模式,在代码执行某些操作时,它可以将函数指针作为参数传入另一个函数中,并在操作完成后调用该函数指针,以防止程序阻塞等问题。 Java如何实现回调函数? 在Java中,回调函数可以使用接口来实现。一个接口类似于一个约定,它规定了方法的名称和类型,但是不提供方法的实现。一个实现接…

    Java 2023年5月26日
    00
  • Spring mvc 分步式session的实例详解

    Spring MVC 分步式Session的实例详解 在Spring MVC中,Session是一种用于在服务器端存储用户数据的机制。本文将详细介绍Spring MVC中分步式Session的实现方法,并提供两个示例来说明如何实现这一过程。 分步式Session的实现方法 在Spring MVC中,分步式Session是一种将Session数据分散存储在多个…

    Java 2023年5月17日
    00
  • 浅析JS获取url中的参数实例代码

    首先,获取URL中的参数是Web开发经常需要的功能。JavaScript提供了多种方式可以获取URL参数,本文将介绍其中两种最常见的方式:URLSearchParams和正则表达式。 使用URLSearchParams URLSearchParams是一个原生对象,主要用来操作URL查询参数。使用URLSearchParams获取URL参数非常方便。 我们可…

    Java 2023年6月15日
    00
  • Java向List集合中批量添加元素的实现方法

    当我们需要向Java中的List类型的集合中批量添加元素时,通常可以使用以下两种方法: 1.使用addAll()方法 List集合的addAll()方法可以接收一个Collection类型的参数,用于将该Collection集合中的元素全部添加到List集合当中。代码示例如下: List<String> list1 = new ArrayList…

    Java 2023年5月26日
    00
  • 用intellij Idea加载eclipse的maven项目全流程(图文)

    以下是详细讲解“用IntelliJ Idea加载Eclipse的Maven项目全流程”的完整攻略。 步骤1:安装IntelliJ Idea 首先,需要在本地安装IntelliJ Idea,如果还没有安装,请官网下载并安装。 步骤2:打开IntelliJ Idea 安装完成后,打开IntelliJ Idea,点击菜单中的“Import Project” 步骤3…

    Java 2023年5月20日
    00
  • Spring Boot JDBC 连接数据库示例

    介绍一下”Spring Boot JDBC 连接数据库示例”的完整攻略。 1. 环境准备 首先,我们需要准备JDK和Maven环境。确保已安装JDK环境,可以在命令行终端中输入以下命令进行验证: java -version 验证通过后,下载和安装Maven。同样在终端中输入以下命令进行验证: mvn -v 验证通过后,环境准备工作就做完了。 2. 添加依赖 …

    Java 2023年5月19日
    00
  • 京东面经总结

    非科班,经历了无数场秋招,现将面试京东的题目记录如下: 一面 kafka在应用场景以及 项目 里的实现 bitmap底层 object里有哪些方法 hashmap相关 sychronized和reentrantlock相关问题以及锁升级 cas和volatile 线程几种状态以及转化 jvm内存模型 mybatis相关问题 Redis数据结构,问了下跳表的底…

    Java 2023年5月8日
    00
  • JVM类加载机制原理及用法解析

    JVM类加载机制原理及用法解析 Java虚拟机是Java语言实现”Write Once, Run Anywhere”程序设计理念的一个关键组成部分,而Java虚拟机中最重要的一个子系统就是类加载子系统。该子系统负责对字节码文件(.class文件)中的类进行加载、验证、准备、解析、初始化等操作,从而在程序的运行中实现类的动态加载和管理。那么,下面我们就来详细讲…

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