首页 > 其他分享 >Sping-IOC理论推导

Sping-IOC理论推导

时间:2024-04-25 22:34:24浏览次数:21  
标签:service 推导 Sping dao getUser void import IOC public

2、IOC理论推导

2.1 IOC原型

  • 使用原来的方式实现
  • 第一步 :编写UseDAO接口
package dao;

public interface UseDao {
    void getUser();
}

  • 第二步 :编写UseDao的实现类
//实现类 一
package dao;

public class UserDaoImpl implements UseDao{
    @Override
    public void getUser() {
        System.out.println("获取默认用户");
    }
}
//实现类二
package dao;

public class UserDaoMysql implements UseDao{
    @Override
    public void getUser() {
        System.out.println("获取mysql用户");
    }
}

  • 第三步 :编写UserService 接口
package service;

public interface UserService {
    void   getUser();
}

  • 第四步 :编写UserService的实现类
package service;

import dao.UseDao;
import dao.UserDaoImpl;
import dao.UserDaoMysql;

public class UserServiceImpl implements UserService{
    /*业务层调用数据层*/
    private UseDao useDao = new UserDaoMysql();

    @Override
    public void getUser() {
        useDao.getUser();
    }
}

  • 第五步 :测试
package dao;

import org.junit.Test;
import service.UserServiceImpl;

public class MyTest {
    @Test
    public void test(){
         UserServiceImpl userService = new UserServiceImpl();
         userService.getUser();
    }
}

  • 第六步 :发现弊端
    • 如果要开发一个新的业务 就需要 新建一个实现UserDao接口的实现类 并在UserService接口实现类下修改对应的实现(第四步中 第十行代码)耦合度过高每次修改需要修改大量的代码牵一发而动全身
  • 第七步 :解决方案
    • 可以在UserService接口实现类下预留一个接口[比较第四步]
package service.impl;

import dao.UserDao;
import dao.impl.UserDaoImpl;
import dao.impl.UserMysqlImpl;
import service.UserService;

public class UserServiceImpl implements UserService {

     private UserDao userDao ;
    /*使用预留的接口 利用set进行注入*/
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
  • 第八步 :再次测试
package dao;

import dao.impl.UserMysqlImpl;
import org.junit.Test;
import service.impl.UserServiceImpl;

public class UserTest {
    @Test
    public void test(){
        /*用户实际调用的是业务逻辑层*/
         UserServiceImpl service = new UserServiceImpl();
         /*降低耦合*/
         service.setUserDao(new UserMysqlImpl());
         service.getUser();
    }
}

2.2 IOC本质

  • 控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法。
    • 控制反转个人认为就是将控制权让出去由本来的自动创建对象到现在的被动接受对象(减少了硬编码 提高了灵活性)[参考2.1 中的第四步与第七步]
    • 控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

标签:service,推导,Sping,dao,getUser,void,import,IOC,public
From: https://www.cnblogs.com/advancingSnail/p/18158768

相关文章

  • 从依赖倒置原则到IOC控制反转实现
    从依赖倒置原则(DependencyInversionPrinciple,DIP)到控制反转(InversionofControl,IoC)再到依赖注入(DependencyInjection,DI)的演进过程,我们可以理解为一种逐步抽象和解耦的设计思想。这种思想在C#等面向对象的编程语言中得到了广泛的应用。首先,让我们回顾一下依赖倒置原则。......
  • 【数学】主成分分析(PCA)的详细深度推导过程
    BasedonDeepLearning(2017,MIT)book.本文基于DeepLearning(2017,MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。blog1概述现代数据集,如网络索引、高分辨率图像、气象学、实验测量等,通常包含高维特征,高纬度的数据可能不清晰、冗余,甚至具有误导......
  • Spring 源码阅读(二)IoC 容器初始化以及 BeanFactory 创建和 BeanDefinition 加载过程
    相关代码提交记录:https://github.com/linweiwang/spring-framework-5.3.33IoC容器三种启动方式XMLJavaSE:ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml")ApplicationContextcontext=newFileSystemXmlApplicationContext("C:/beans......
  • 快速理解Laravel容器(IOC、DI、Provider、Contract)
    源码理解思维的提升分享一些个人见解。Laravel里面的某些概念,就像魔术一样,看起来很厉害,当知道魔术怎么变的,就会认为也不过如此。所以不必感觉Laravel里有些概念难以理解。应当抛除被框架约束思维的枷锁,用PHP设计的角度去思考,关注大概,而不是在在框架层面逐行磨叽。毕竟源码那么......
  • 深入了解PBKDF2:密码学中的关键推导函数
    title:深入了解PBKDF2:密码学中的关键推导函数date:2024/4/2020:37:35updated:2024/4/2020:37:35tags:密码学对称加密哈希函数KDFPBKDF2安全密钥派生第一章:密码学基础对称加密和哈希函数对称加密:对称加密是一种加密技术,使用相同的密钥进行加密和解密。常见......
  • 【chatgpt】IoCreateDevice和IoCreateSymbolicLink是两个重要的函数
    在Windows设备驱动程序开发中,IoCreateDevice和IoCreateSymbolicLink是两个重要的函数,用于创建设备对象和符号链接,它们的作用如下:IoCreateDevice:作用:创建一个设备对象,驱动程序使用设备对象来与系统和其他驱动程序进行通信。参数:需要提供设备扩展名和设备的类型、特征以及......
  • python基础-函数(lambda表达式、函数作参数、内置函数、推导式)和pip
    函数进阶今日概要:函数名就是一个变量(扩展)匿名函数(lambda表达式)重点内置函数——python内置函数推导式(一行代码生成数据)1.函数名就是变量deffunc():passv1=funcv1()func()defregister():...deflogin():...def......
  • C#中 控制反转IOC与依赖注入DI
    一、IOC与DI的关系IOC即控制反转,用来管理项目中对象的生命周期和依赖关系,DI依赖注入,用来实现IOC,IOC是思想,DI是实现,在项目中通常一起出现,像是A类调用B类的方法,IOC容器资源给予对应资源,有助于实现依赖倒置DIP二、DI常用的注入方式(.net的DI默认的是构造函数定义)构造函数注入:构......
  • 异常捕获列表字典推导式
    【一】什么是异常异常是程序运行时可能发生的错误或意外情况。在Python中,异常是一种对象,表示程序执行期间发生的错误。当出现异常时,程序的正常流程会被中断,而是跳转到异常处理流程。【二】异常分类在Python中,异常分为两类:内建异常(Built-inExceptions):由Python内部定义的......
  • Python列表推导式
    一、列表推导列表推导式又称推导列表。列表推导式是以列表为载体,以推导的方式将数据生成并放在列表中。推导即规则,它支持for循环和筛选模式(if判断模式)。设定一个既定规则在列表中进行数据生成,列表推导式比传统方法更为简洁,代价是放弃一部分的可读性。二、如何声明列表推导式最......