简单记录Spring 依赖注入(DI)

目录

一、依赖注入是什么?

二、示例说明

1.代码文件列表

2.创建类

3.测试


一、依赖注入是什么?

首先Spring的核心是建立在依赖注入的概念上,Spring提供一个容器(Spring应用上下文,Spring application context),它会创建和管理应用组件(bean),bean会在Spring应用上下文中装配在一起,形成一个完整的应用程序。

所谓依赖注入,就是明确地定义组件接口(如UserDAO,面向接口编程),独立开发各个组件,然后根据组件间的依赖关系组装(UserAction依赖于UserService,UserService依赖于UserDAO)运行的设计开发模式。是 Spring 框架核心 IOC 的具体实现。

系统组装的时候,只要是UserDAO的实现类就可以注入到UserService中,可以是UserDAOjdbc实现,也可以是UserDAOmybatis实现。具体用那个组装时在决定。

依赖注入框架(如Spring),允许用户通过约定(以及注解)将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码,以便更轻松地管理大型Java项目。

二、示例说明

1.代码文件列表

MyHello.java   --interface
MyHelloImplLiSi.java   --class implements MyHello
MyHelloImplXiaoMing.java   --class implements MyHello

2.创建类

MyHello.java   --interface

package com.example.demo;

public interface MyHello {
    public String hellalert();
}

MyHelloImplLiSi.java   --class implements MyHello

package com.example.demo;

public class MyHelloImplLiSi implements MyHello {
    @Override
    public String hellalert() {
        return "李四";
    }
}

MyHelloImplXiaoMing.java   --class implements MyHello

package com.example.demo;

public class MyHelloImplXiaoMing implements MyHello {
    @Override
    public String hellalert() {
        return "小明";
    }
}

3.测试

import com.example.demo.MyHelloImplLiSi;
import org.junit.Test;

public class TestMy {
    //实例化对象调用
    MyHelloImplLiSi myHello= new MyHelloImplLiSi();

    @Test
    public void testXingMing(){
        System.out.println(myHello.hellalert());
    }
}

不使用Spring框架依赖注入装配时,像测试代码中一样在对象内部实例化类的对象硬编码调用。测试结果打印“李四”,那如果要得到“小明”呢?此时是不是又要在对象内部实例化MyHelloImplXiaoMing类对象调用,是吧。


下面我们在Spring框架下依赖注入装配调用测试:

我们将
MyHello.java   --interface
MyHelloImplLiSi.java   --class implements MyHello
MyHelloImplXiaoMing.java   --class implements MyHello
移入springboot项目测试

package com.sbootwo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SbootwoApplicationTests {

    @Test
    void contextLoads() {
    }

    //spring自动装配bean,依赖注入应用程序上下文(容器)
    @Autowired
    private MyHello myHello;

    @Test
    public void testXingMing(){
        System.out.println(myHello.hellalert());
    }
}

测试代码中依赖注入了接口MyHello到容器中进行方法调用,没有了对象内部实例化类的对象硬编码调用。增加了外部实现的灵活性。在方法实现上要实现“李四”或“小明”只要接口不变,就可以在装配接口时任意组装。如下:

package com.sbootwo;

import org.springframework.stereotype.Service;

@Service //装配小明到接口
public class MyHelloImplXiaoMing implements MyHello {
    @Override
    public String hellalert() {
        return "小明";
    }
}

或者

package com.sbootwo;

import org.springframework.stereotype.Service;

@Service //装配李四到接口
public class MyHelloImplLiSi implements MyHello {
    @Override
    public String hellalert() {
        return "李四";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值