广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring DI依赖注入过程解析
  • 137
分享到

Spring DI依赖注入过程解析

Spring DI依赖注入Spring 依赖注入 2022-11-13 19:11:35 137人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录依赖简介依赖注入spring DI依赖注入详解依赖简介 一个典型的企业应用程序不是由一个单一的对象组成(或Spring的说法中的bean)。即使是最简单的应用程序也只有几个对象一

依赖简介

一个典型的企业应用程序不是由一个单一的对象组成(或Spring的说法中的bean)。即使是最简单的应用程序也只有几个对象一起工作来呈现最终用户看作是一个连贯的应用程序。如何从定义许多独立的bean定义到完全实现的应用程序,在这些应用程序中对象协作实现目标。

依赖注入

依赖注入(DI)是一个过程,通过这个过程,对象可以通过构造函数参数,工厂方法的参数或者在构造或返回对象实例后设置的属性来定义它们的依赖关系从工厂方法。然后容器在创建bean时注入这些依赖关系。这个过程从根本上说是相反的,因此名为控制反转(ioc),它本身通过使用类的直接构造或服务定位符模式来控制它自己的依赖关系的实例化或位置。
代码与DI原则相比更加清晰,当对象提供依赖时,解耦更为有效。该对象不查找它的依赖关系,不知道依赖关系的位置或类。因此,您的类变得更容易测试,特别是当依赖关系在接口或抽象基类上时,它们允许在单元测试中使用存根或模拟实现。

DI存在两种主要的变体,基于构造函数的依赖注入和基于Setter的依赖注入

Spring DI依赖注入详解

pojo类:

public class Student {
    private String name;
    private Hello hello;
    private String[] books;
    private List<String> hobbys;
    private Map<String, String> games;
    private String wife;
    private Properties info;
    
	public Student() {
	}

    public Student(String name, String wife) {
        this.name = name;
        this.wife = wife;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Hello getHello() {
        return hello;
    }

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

    public String[] getBooks() {
        return books;
    }

    public void setBooks(String[] books) {
        this.books = books;
    }

    public List<String> getHobbys() {
        return hobbys;
    }

    public void setHobbys(List<String> hobbys) {
        this.hobbys = hobbys;
    }

    public Map<String, String> getGames() {
        return games;
    }

    public void setGames(Map<String, String> games) {
        this.games = games;
    }

    public String getWife() {
        return wife;
    }

    public void setWife(String wife) {
        this.wife = wife;
    }

    public Properties getInfo() {
        return info;
    }

    public void setInfo(Properties info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", hello=" + hello +
                ", books=" + Arrays.toString(books) +
                ", hobbys=" + hobbys +
                ", games=" + games +
                ", wife='" + wife + '\'' +
                ", info=" + info +
                '}';
    }
}

注入普通的String属性:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="name" value="dahe"/>
</bean>

bean注入,适用于其他的实体类:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="hello" ref="hello"/>
</bean>

数组注入:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="books">
        <array>
            <value>C语言入门到精通</value>
            <value>Spring底层原理</value>
        </array>
    </property>
</bean>

List注入:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="hobbys">
        <list>
            <value>编程</value>
            <value>美女</value>
        </list>
    </property>
</bean>

Map注入:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="games">
        <map>
            <entry key="王者荣耀" value="30级"/>
            <entry key="我的世界" value="100级"/>
        </map>
    </property>
</bean>

空值注入:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="wife">
        <null/>
    </property>
</bean>

Properties注入:

<bean id="student" class="top.imustctf.pojo.Student">
    <property name="info">
        <props>
            <prop key="学号">202099166</prop>
            <prop key="专业">软件工程</prop>
        </props>
    </property>
</bean>

p命名空间注入:

要使用p命名空间,你需要在beans配置头加入如下语句:

xmlns:p="Http://www.springframework.org/schema/p"

例如:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

随后,就可以使用p方式进行注入:

<bean id="student" class="top.imustctf.pojo.Student" p:name="dahe"
          p:wife="xiaoqian"/>

c命名空间注入:

要使用c命名空间,你需要在beans配置头加入如下语句:

xmlns:c="http://www.springframework.org/schema/c"

随后,就可以使用c方式进行注入:(c命名空间是通过构造器进行注入,这就需要pojo类必须存在一个有参的构造方法)

<bean id="student" class="top.imustctf.pojo.Student" c:name="dahe"
          c:wife="xiaoqian"/>

到此这篇关于Spring DI依赖注入详解的文章就介绍到这了,更多相关Spring DI依赖注入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring DI依赖注入过程解析

本文链接: https://www.lsjlt.com/news/170885.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring DI依赖注入过程解析
    目录依赖简介依赖注入Spring DI依赖注入详解依赖简介 一个典型的企业应用程序不是由一个单一的对象组成(或Spring的说法中的bean)。即使是最简单的应用程序也只有几个对象一...
    99+
    2022-11-13
    Spring DI依赖注入 Spring 依赖注入
  • Spring的DI依赖注入详解
    目录1、什么是DI依赖注入?2、利用 set 方法给属性赋值3、利用 构造函数 给属性赋值总结:1、什么是DI依赖注入? spring动态的向某个对象提供它所需要的其他对象。这一点是...
    99+
    2022-11-13
  • spring怎么实现依赖注入DI
    这篇文章主要介绍了spring怎么实现依赖注入DI的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring怎么实现依赖注入DI文章都会有所收获,下面我们一起来看看吧。spring依赖注入DI1、创建一个mav...
    99+
    2023-06-29
  • ASP.NET Core依赖注入(DI)讲解
    ASP.NET Core的底层设计支持和使用依赖注入。ASP.NET Core 应用程序可以利用内置的框架服务将服务注入到启动类的方法中,并且应用程序服务也可以配置注入。由ASP.N...
    99+
    2022-11-13
  • spring如何实现依赖注入DI(spring-test方式)
    目录spring依赖注入DI1、创建一个maven项目2、修改pom.xml3、添加类Person和Body4、在配置类App中,添加ComponentScan5、新建一个测试类6、...
    99+
    2022-11-13
  • Spring依赖注入(DI)两种方式的示例详解
    目录一、依赖注入方式二、setter注入引用类型简单类型三、构造器注入引用类型简单类型参数适配(了解)四、依赖注入方式选择一、依赖注入方式 思考:向一个类中传递数据的方式有几种? 普...
    99+
    2022-11-13
  • 浅谈spring DI 依赖注入方式和区别
    目录spring DI 3种DI注解的区别 1 @Autowired 2 @Inject 3 @Resource 3种注入方式的区别 1 field注入 2 构造器注入 3 sett...
    99+
    2022-11-12
  • spring DI依赖注入方式和区别有哪些
    小编给大家分享一下spring DI依赖注入方式和区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!spring DISpring框架对Java开发的重要性...
    99+
    2023-06-20
  • Spring依赖注入的示例分析
    这篇文章给大家分享的是有关Spring依赖注入的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.依赖简介一个典型的企业应用程序不是由一个单一的对象组成(或Spring的说法中的bean)。即使是最简单的...
    99+
    2023-06-03
  • .net程序开发IOC控制反转和DI依赖注入详解
    目录IOC控制反转DI依赖注入服务生命周期其它IOC控制反转 大部分应用程序都是这样编写的:编译时依赖关系顺着运行时执行的方向流动,从而生成一个直接依赖项关系图。 也就是说,如果类 ...
    99+
    2022-11-13
    .net 控制反转依赖注入 .net IOC DI
  • Quarkus中的依赖注入DI和面向切面aop编程
    目录前言JSR365:Java2.0的上下文和依赖注规范Bean声明和依赖注入Bean的生命周期条件化初始Bean面向切面编程aopBean列表接口结语前言 做java开发的肯定清楚...
    99+
    2022-11-13
  • Spring配置与依赖注入基础详解
    目录1.Spring配置1.1.别名1.2.Bean的配置1.3.import2.依赖注入(DI)2.1.构造器注入2.2.Set 注入(重点)2.3.扩展的注入2.4.Bean的作...
    99+
    2022-11-13
    Spring 配置 Spring 依赖注入
  • Go依赖注入DI工具wire使用详解(golang常用库包)
    目录什么是依赖注入第一次编写mysql操作类:第二次编写mysql操作类:第三次编写mysql操作类:何时使用依赖注入wire 概念说明provider 和 injectorprov...
    99+
    2022-11-13
  • Nest.js之依赖注入原理及实现过程详解
    目录前言TypeScript 依赖注入的原理浅析 Nest.js 实现依赖注入的过程总结前言 很久之前初学 Java 时就对注解及自动依赖注入这种方式感觉到不可思议,但是一直没有勇...
    99+
    2023-01-12
    Nest.js 依赖注入原理 Nest.js 依赖注入
  • JSR通过JavaEE 6依赖注入的示例分析
    这篇文章将为大家详细讲解有关JSR通过JavaEE 6依赖注入的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Google Guice和刚刚被VMware收购的SpringSourc...
    99+
    2023-06-17
  • Spring三级缓存解决循环依赖的过程分析
    目录循环依赖解决思路解决流程二个缓存不行?总结循环依赖 什么是循环依赖?很简单,看下方的代码就知晓了 @Service public class A { @Autowired...
    99+
    2023-05-14
    Spring循环依赖 Spring三级缓存解决循环依赖
  • Java Spring中各依赖注入注解的区别是什么
    本篇文章给大家分享的是有关Java Spring中各依赖注入注解的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring对于Be...
    99+
    2022-10-19
  • 理解Spring中的依赖注入和控制反转
    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框...
    99+
    2023-05-30
    spring 依赖注入 控制反转
  • 使用Spring自定义实现IOC和依赖注入(注解方式)
    目录大致思路:注解实现方式:xml实现方式:1. 引入相关jar2. 定义注解类ExtService是注解类的, ExtResource是注解属性的3.定义一个借口4. 接口和使用注...
    99+
    2022-11-12
  • Spring依赖注入与第三方Bean管理基础详解
    目录1. 注解开发依赖注入1.1 使用@Autowired注解开启自动装配模式1.2 使用@Qualifier注解指定要装配的bean名称1.3 使用@Value实现简单类型注入2....
    99+
    2022-12-23
    Spring依赖注入 Spring第三方Bean管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作