依赖注入 订阅
依赖注入(Dependency Injection)是Spring框架的核心之一。 展开全文
依赖注入(Dependency Injection)是Spring框架的核心之一。
信息
外文名
DI
中文名
依赖注入
企业微信发展历程
当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。依赖注入有两种:设值注入、构造注入所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。
收起全文
精华内容
下载资源
问答
  • 依赖注入
    千次阅读
    2021-05-27 17:19:03

    依赖注入

    声明:本文章属于学习笔记,根据狂神说的Spring编写

    Spring官方文档:Spring官方文档

    一丶依赖注入:

    依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。

    二丶DI依赖注入环境

    首先我们看这两个实体类:

    public class Address {
        private String address;
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "Address{" +
                    "address='" + address + '\'' +
                    '}';
        }
    }
    
    
    public class Student {
        private String name;
        private Address address;
        private String[] books;
        private List<String> hobbys;
        private Map<String,String> card;
        private Set<String> games;
        private String wife;
        private Properties info;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Address getAddress() {
            return address;
        }
    
        public void setAddress(Address address) {
            this.address = address;
        }
    
        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> getCard() {
            return card;
        }
    
        public void setCard(Map<String, String> card) {
            this.card = card;
        }
    
        public Set<String> getGames() {
            return games;
        }
    
        public void setGames(Set<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 + '\'' +
                    ", address=" + address.toString() +
                    ", books=" + Arrays.toString(books) +
                    ", hobbys=" + hobbys +
                    ", card=" + card +
                    ", games=" + games +
                    ", wife='" + wife + '\'' +
                    ", info=" + info +
                    '}';
        }
    }
    
    

    之后配置beans.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="stu" class="com.kdy.pojo.Student">
            <property name="name" value="kdy"/>
        </bean>
    </beans>
    

    测试类测试:

    public class MyTest {
        @Test
        public void test(){
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            Student stu = (Student)context.getBean("stu");
            System.out.println(stu.getName());
        }
    }
    

    运行结果:
    在这里插入图片描述

    三丶依赖注入之set注入

    我们还是来用student类来进行set的注入。

    beans.xml文件的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="address" class="com.kdy.pojo.Address"></bean>
        <bean id="stu" class="com.kdy.pojo.Student">
            <property name="name" value="kdy"/>
    
            <property name="address" ref="address"/>
            <!--数组-->
            <property name="books">
                <array>
                    <value>西游记</value>
                    <value>红楼梦</value>
                </array>
            </property>
    
            <!--list-->
            <property name="hobbys">
                <list>
                    <value>抽烟</value>
                    <value>喝酒</value>
                    <value>烫头</value>
                    <value>打游戏</value>
                </list>
            </property>
            <property name="card">
                <map>
                    <entry key="姓名" value="kdy" />
                    <entry key="学号" value="041940223" />
                </map>
            </property>
            <property name="games">
                <set>
                    <value>lol</value>
                    <value>cf</value>
                    <value>dnf</value>
                </set>
            </property>
            <property name="wife">
                <null/>
            </property>
            <property name="info">
                <props>
                    <prop key="name" > kdy</prop>
                    <prop key="password" > kdy1</prop>
                    <prop key="lll" > kdy2</prop>
                </props>
            </property>
        </bean>
    </beans>
    

    测试类测试:

       @Test
        public void test(){
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            Student stu = (Student)context.getBean("stu");
            System.out.println(stu.toString());
        }
    

    运行结果:

    Student{name=‘kdy’, address=Address{address=‘null’}, books=[西游记, 红楼梦], hobbys=[抽烟, 喝酒, 烫头, 打游戏], card={姓名=kdy, 学号=041940223}, games=[lol, cf, dnf], wife=‘null’, info={password=kdy1, name=kdy, lll=kdy2}}

    四丶c命名和p命名空间注入

    首先如果我们要使用这个c命名或者是p命名空间注入,那么就必须要引入标签连接:

    xmlns:p=“http://www.springframework.org/schema/p”
    xmlns:c=“http://www.springframework.org/schema/c”

    userbeans.xml文件配置:
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

    更多相关内容
  • 较为框架式的演示了DI服务依赖注入 适用于熟悉C#中的继承,基本的Core命令使用等. 该示例演示了以服务器集群为背景的各种业务的依赖注入. 示例来自于B站杨中科老师的.NET Core(6.0)教学.
  • 你可能在一些框架或者库种听说过“依赖注入”这个词,比如说著名的前端框架AngularJS,依赖注入就是其中一个非常重要的特性。但是,依赖注入根本就不是什么新鲜玩意,它在其他的编程语言例如PHP中已经存在已久。同时...
  • 本篇文章主要介绍了详解ASP.NET Core 在 JSON 文件中配置依赖注入 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • ✨一个轻量级的PHP依赖注入框架,让你自定义的方法也可以使用依赖注入.
  • MATLAB 的依赖注入框架。 这大致基于 Martin Fowler 的依赖注入文章和 Spring。 组件是使用构造函数注入设置的。 这要求每个组件都从 mdepin.Bean 继承,并为注入的服务具有可公开设置的属性。
  • EFcore Repository 依赖注入方式实现数据库基本操作
  • 本文主要介绍面向对象编程依赖注入的知识资料,这里对依赖注入的资料做了详细介绍,有兴趣的小伙伴可以参考下
  • golang依赖注入——wire

    2021-01-07 21:36:54
    最近在做golang的框架,发现golang同样需要类似java中spring一样的ioc依赖注入框架。 如果项目规模小的情况下,是否有依赖注入框架问题不大,但是当项目变大之后,有一个合适的依赖注入框架是十分必要的。 通过调研...
  • Spring Boot依赖注入

    2021-03-04 03:03:53
    Spring Boot依赖注入
  • 主要介绍了PHP依赖注入原理与用法,简单讲述了依赖注入的概念、原理并结合实例形式分析了php实现与使用依赖注入的相关操作技巧,需要的朋友可以参考下
  • c# 依赖注入 控制反转

    2017-08-14 15:24:53
    控制反转 依赖注入的c#实现,很好的教程。
  • 主要介绍了thinkphp5.1框架容器与依赖注入,结合实例形式分析了thinkPHP5.1容器与依赖注入相关原理与使用技巧,需要的朋友可以参考下
  • 主要介绍了php反射学习之依赖注入,结合具体实例形式分析了php基于反射的依赖注入原理与实现方法,需要的朋友可以参考下
  • 本文介绍了golang不到30行代码实现依赖注入的方法,分享给大家,具体如下: 项目地址 go-di-demo 本项目依赖 使用标准库实现,无额外依赖 依赖注入的优势 用java的人对于spring框架一定不会陌生,spring核心就是...
  • 主要介绍了angular 服务的单例模式(依赖注入模式下)详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • C++ 依赖注入

    2017-10-22 10:15:33
    软件设计是控制依赖关系的方法和方式。其中依赖注入起很重的作用。依赖注入是简单,但非常强大的设计模式。本文介绍依赖注入的概念,并介绍简单且实用的C++依赖注入容器的一种实现方法。
  • 在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程序,MVC6也利用了依赖注入的功能重新对...
  • 本篇文章主要介绍了详解ASP.NET Core 中的框架级依赖注入,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了PHP基于反射机制实现自动依赖注入的方法,结合实例形式分析了php使用反射实现自动依赖注入的步骤、原理与相关操作技巧,需要的朋友可以参考下
  • 主要给大家介绍了关于.NET Core中依赖注入AutoMapper的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • Container容器通过 set 方法绑定类的别名和完整的类名,数据会放到 $this->bind 数组里以便后面实例化类用;然后通过 get 的方法实例化类和类的自动依赖注入
  • 浅谈依赖注入

    2021-02-20 18:05:34
    最近几天在看一本名为DependencyInjectionin.NET的书,主要讲了什么是依赖注入,使用依赖注入的优点,以及.NET平台上依赖注入的各种框架和用法。在这本书的开头,讲述了软件工程中的一个重要的理念就是关注分离...
  • 主要介绍了浅析Node.js中使用依赖注入的相关问题及解决方法,Node.js是一个将JavaScript应用运行于服务器端的框架,需要的朋友可以参考下
  • 主要介绍了PHP类的反射来实现依赖注入过程以及相关知识点分享,对此有兴趣的朋友跟着小编学习下吧。
  • pimple.js “ Pimple”简单依赖注入容器的Javascript实现
  • 主要介绍了ABP框架的基础配置及依赖注入讲解,是ABP框架上手使用的基本,要的朋友可以参考下
  • rsut 依赖注入

    2018-06-19 17:30:04
    英文版,描述rust 解耦的几种方式 。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 406,008
精华内容 162,403
关键字:

依赖注入