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日

相关文章

  • JAVAWEB实现简单的商城项目(一)实例代码解析

    首先,需要说明的是,”JAVAWEB实现简单的商城项目(一)实例代码解析”是一篇比较详细的文章,讲述了如何使用JavaWeb技术实现一个简单的商城项目,并对项目中的代码进行了详细解析。 文章总共分为以下几个部分: 1. 简介 在这个部分中,作者简要说明了本文要介绍的内容,即如何使用JavaWeb技术实现一个简单的商城项目,并说明了本文的目标读者群体以及需要具…

    Java 2023年5月19日
    00
  • IDEA中打jar包的2种方式(Maven打jar包)

    在IDEA中打jar包有两种方式,分别是使用IDEA自带的打包工具和利用Maven插件进行打包。 使用IDEA自带的打包工具 方式一:使用IDEA的界面进行打包 在IDEA中打开你的项目 在Project面板中,找到需要打包的模块并右键选择Open Module Settings 在左侧选择Artifacts选项卡 点击+按钮添加一个新的JAR 配置打包的内…

    Java 2023年6月2日
    00
  • java的nio的使用示例分享

    Java NIO的使用示例分享 Java NIO(New IO)是从Java 1.4版本引入的替代标准IO的API,它提供了更快的IO操作,包括文件操作、网络操作等。本篇文章将详细介绍Java NIO的使用示例。 NIO基础知识 NIO的核心是缓冲区(Buffer)和通道(Channel)。缓冲区是一个对象,在IO操作中作为数据容器使用,通道则是表示和数据源…

    Java 2023年5月20日
    00
  • Spring打包jar包时jsp页面无法访问问题解决

    针对Spring打包jar包时jsp页面无法访问的问题解决,可以依照以下步骤进行操作: 问题解析 在Spring项目中,我们在开发过程中经常使用jsp页面进行开发和展示,当我们将Spring项目打包成jar包并进行部署时,就会出现jsp页面无法访问的问题。原因是嵌入式Web服务器默认不支持jsp引擎。 解决步骤 步骤一:添加插件和依赖 在Spring项目的p…

    Java 2023年6月15日
    00
  • Java毕业设计实战之养老院管理系统的实现

    Java毕业设计实战之养老院管理系统的实现攻略 一、项目概述 养老院管理系统是一款基于Java语言开发的管理系统,可实现对养老院人员、床位等资源进行管理,并可对养老院内发生的事情进行记录、统计和分析,让养老院管理更加高效、便捷。 二、项目特点 采用MVC架构,运用Spring Boot、MyBatis等框架和技术实现系统开发。 实现对登录的权限分配,管理员用…

    Java 2023年5月24日
    00
  • JAVA初级项目——实现图书管理系统

    JAVA初级项目——实现图书管理系统 项目概述 图书管理系统是一个针对图书馆、书店等场所用来管理图书的软件。该系统可以实现图书的借阅、归还、查询、添加、删除等功能,提高了图书管理的效率。 本项目主要是通过Java语言和基于Web的技术实现一个简单的图书管理系统,主要包括以下功能模块: 用户登录和注册:用户可实现登录和注册账号。 图书管理:管理员可添加、删除图…

    Java 2023年5月23日
    00
  • spring启动后保证创建的对象不被垃圾回收器回收

    确保spring创建的对象不被垃圾回收器回收需要明白spring是如何管理bean的。bean是指spring容器中的对象,它们都有自己的生命周期,spring对bean的管理保证了bean在合适的时间被创建并放入容器中,并在合适的时间被销毁。因此,在合适的时机,spring 将会自动为 bean 进行垃圾回收。但是,如果我们不想让被 spring 管理的 …

    Java 2023年5月19日
    00
  • Android自定义View仿腾讯TIM下拉刷新View

    对于Android自定义View仿腾讯TIM下拉刷新View的完整攻略,可以分为以下几个步骤: 1. 确定需求,分析原理 在开始编写自定义下拉刷新View之前,我们需要先确定具体的需求,从而了解需要实现的功能点。对于仿腾讯TIM下拉刷新View,需要实现以下功能: 下拉刷新时,显示header并执行刷新操作 上拉加载更多时,显示footer并执行加载更多操作…

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