首页 > 其他分享 >【学习笔记】IOC的推导及本质

【学习笔记】IOC的推导及本质

时间:2023-02-11 11:55:46浏览次数:38  
标签:wang 推导 IOC dao 笔记 getUser import com public

IOC的推导及本质

 

1.IOC理论推导

原来要实现一个业务,需要 Service接口、ServiceImpl、Dao接口、DaoImpl

如下:

UserDao接口:

package com.wang.dao;
​
public interface UserDao {
    void getUser();
}

UserDaoImpl实现类:

package com.wang.dao;
​
public class UserDaoImpl implements UserDao{
​
    @Override
    public void getUser() {
        System.out.println("默认用户");
    }
}

UserService接口:

package com.wang.service;
​
public interface UserService {
    void getUser();
}

UserServiceImpl实现类:

package com.wang.service;
​
import com.wang.dao.UserDao;
import com.wang.dao.UserDaoImpl;
​
public class UserServiceImpl implements UserService{
​
    private UserDao userDao = new UserDaoImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

用户要实现这个业务,直接调用UserserviceImpl即可

但是,如果用户此时想要改变业务,输出“Spring用户”,需要在加一个UserDaoImpl,如果想要输出,就需要修改UserServiceImpl中的调用,业务每变一次,我们就要修改一次。

如下:

UserDaoSpringImpl实现类:

package com.wang.dao;
​
public class UserDaoSpringImpl  implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Spring用户");
    }
}

UserServiceImpl实现类:

package com.wang.service;
​
import com.wang.dao.UserDao;
import com.wang.dao.UserDaoImpl;
import com.wang.dao.UserDaoSpringImpl;
​
public class UserServiceImpl implements UserService{
​
    private UserDao userDao = new UserDaoSpringImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

如果代码量十分大,这样无疑是十分繁琐的,所以我们可以利用set方法来实现值的动态注入

UserServiceImpl实现类:

package com.wang.service;
​
import com.wang.dao.UserDao;
import com.wang.dao.UserDaoImpl;
import com.wang.dao.UserDaoSpringImpl;
​
public class UserServiceImpl implements UserService{
​
    private UserDao userDao;
​
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
​
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

主程序:

import com.wang.dao.UserDaoSpringImpl;
import com.wang.service.UserService;
import com.wang.service.UserServiceImpl;
import org.junit.Test;
​
​
public class MyTest {
    @Test
    public void test01(){
​
        UserService userService = new UserServiceImpl();
        ((UserServiceImpl) userService).setUserDao(new UserDaoSpringImpl());
        userService.getUser();
    }
}

 

这样实现和之前的区别:

  • 之前是程序主动创建对象,控制权在程序员手中

  • 使用set注入后,程序不在有主动性,而是变成了被动接受对象

 

以上就是IOC的原型

 

2.IOC本质

控制反转 IOC 是一种设计思想,在没有IOC的程序中,对象的创建和对象的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后,将对象的创建交给第三方,所谓控制反转就是:获得依赖对象的方式反转了。

控制反转是一种通过描述(xml或注解)并通过第三方去生产或获取特定对象的方式,在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入

标签:wang,推导,IOC,dao,笔记,getUser,import,com,public
From: https://www.cnblogs.com/wztblogs/p/17111149.html

相关文章

  • Flutter笔记-基础组件
    加载网络图片以及本地图片Image(image:NetworkImage("https://img-s-msn-com.akamaized.net/tenant/amp/entityid/BB12IU4R.img?w=8......
  • 微分学习笔记
    微分学习笔记注意,本人太菜了,只是写下自己的理解,所以可能有很多表述错误、不清晰的地方,请指正。简介好文!用来学习多项式、生成函数的工具。我们知道微积分,而所谓微分就......
  • 华普物联AIOCAT版本 HP-AIOCAT-244
    HP-AIOCAT-244是一款支持4路输入、4路输出、2路模拟量检测、1路温度检测的网络IO产品,支持ModbusRTU/TCP协议。以“远程控制”作为功能核心,高度易用性,用户可方便快速的集成......
  • 日常笔记——工程师之路
    努力成为工程师1.早来晚走(员工)2.站在领导角度思考问题(领导)3.把公司当做自己的来做(创始人)4.坚持1-3条4到5年工作必备技能:windows三剑客:word、PPT、EXEL定期汇......
  • 搜索与回溯算法笔记
    目录搜索与回溯算法  迷宫问题:例5.1素数环:将1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。例5.2:设有n个整数的集合{1,2,……,n},从中任意取出r个数进行排列(r<n),试......
  • 斯特林数学习笔记
    斯特林数学习笔记注:本篇只为作者自己看懂,方便以后复习。注意:如无特殊说明,以下公式的范围皆为\(n\ge0\)且\(n\)为整数。因为我太菜啦,所以很多东西都只有最浅显的部分......
  • PLC入门笔记5
    定时器指令及其应用定时器指令介绍设备启动预热时间、化学反应时间、电机星三角转换时间?我们需要定时器。PLC计时器指令由时间续电器演变而来。定时器本质是一个输出指......
  • 《分布式技术原理与算法解析》学习笔记Day07
    分布式锁什么是分布式锁?为了实现分布式互斥,我们需要在某个地方做个标记,这个标记是每个线程都可以看到,当标记不存在时可以设置该标记,当标记被设置后,其他线程只能等待拥有......
  • 关于顺达react主管笔记之学习之创建表单
    顺达主管86378678是当回事的发挥importLogsfrom"./Components/Logs/Logs";importLogsFormfrom"./Components/LogsForm/LogsForm";import'./App.css';constApp=......
  • 关于Java基础-第五天的复习笔记
    1.方法概述1.1方法的概念(理解)方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义......