IOC控制反转与DI依赖注入

IOC控制反转与DI依赖注入新建UserDao接口新建UserDaoImpl实现类IOC控制反转与DI依赖注入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~开发工具与关键技术:IntellijIDEASpring作者:周欢撰写时间:2021/1/19~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~IOC(控制反转)作用:实现将组件间的关系从程序内部提…

大家好,又见面了,我是你们的朋友全栈君。

 IOC控制反转与DI依赖注入

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Intellij IDEA  Spring

作者:周欢

撰写时间:2021/1/19

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

IOC(控制反转)

  1. 作用:实现将组件间的关系从程序内部提到外部容器(spring容器)来管理。
  2. 解释:
  • 控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法。也有人认为DI只是IOC的宁一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建与对象的依赖关系完全硬编代码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,通俗来讲,控制反转就是获取依赖对象的方式反转了。
  • 采用XML方式配置Bean时,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合二为一,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
  • 控制反转是一种通过描述(XML/注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,DI)

 

  1. IOC原型:从本质上解决了问题,程序员不在去管理对象的创建。系统耦合性大大的降低,可以更专注的在业务的实现上!

 

IOC控制反转与DI依赖注入

图像理解IOC:

IOC控制反转与DI依赖注入

新建UserDao接口

新建UserDao接口
	package com.gx.Dao;
	public interface UserDao { 
        void getUser();
    }

新建UserDaoImpl实现类

新建UserDaoImpl实现类
package com.gx.Dao;
public class UserDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("默认获取用户数据");
    }
}

新建UserService业务接口

新建UserService业务接口
package com.gx.Service;
public interface UserService { 
    void getUser();
}

新建UserServiceImpl业务实现接口

新建UserServiceImpl业务实现接口
import com.gx.Dao.UserDao;
import com.gx.Dao.UserDaoImpl;
public class UserServiceImpl implements UserDao, UserService {
//把dao层引入到业务层 
// private UserDao userDao =new UserDaoMysqlImpl();
// 代码弊端:用户每变更一次需求需要手动改变private UserDao userDao =new UserDaoMysqlImpl();中的new对象(UserDaoMysqlImpl)

private  UserDao userDao;
    //利用set进行动态实现值的注入
    public void setUserDao(UserDao userDao){ this.userDao=userDao;}
    public void getUser() {
        //在业务层里面调用dao层
        userDao.getUser();
    }
}

新建UserDaoMysqlImpl 业务实现接口

新建UserDaoMysqlImpl 业务实现接口
package com.gx.Dao;
public class UserDaoMysqlImpl implements UserDao {
    public void getUser() {
        System.out.println("Mysql获取用户数据");
    }
}

使用测试类测试一下:

import com.gx.Service.UserService;
import com.gx.Service.UserServiceImpl;
public class MyTest {
    public static void main(String[] args) {
        //用户实际调用的是业务层,它们不需要接触dao层
        UserService userService = new UserServiceImpl();
   ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
        userService.getUser();
    }
}

运行结果图:

IOC控制反转与DI依赖注入

使用反控制转(IOC)之前程序员是注定创建对象!使用反控制转(IOC)之后控制权在程序员手上。

 

DI(依赖注入) 

解释:组件之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。

依赖注入:set注入

依赖:bean对象的创建依赖于容器

注入:bean对象中的所有属性,由容器注入!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151670.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android开发股票数据接口,股票数据接口-股票数据接口api「建议收藏」

    原标题:股票数据接口-股票数据接口api量亿数据专注金融领域API数据接口,其中包括期货、股票、期权、外汇等,只需要注册即可申请使用。免费申请网址:http://www.liangyee.com/如何获取股票数据,股票数据接口-股票数据接口api,以美股API数据接口为例。5分钟K线接口地址:http://stock.liangyee.com/bus-api/USStock/marketData/…

  • java实现闰年判断

    java实现闰年判断要求:给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:1、年份是4的倍数而不是100的倍数;2、年份是400的倍数。其他的年份都不是闰年。输入:输入包含一个整数y,表示当前的年份。输出:输出一行,如果给定的年份是闰年,则输出yes,否则输出no。importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Scanneri..

  • BufferedWriter使用write方法如何换行

    BufferedWriter使用write方法如何换行BufferedWriter对象自带newline()方法可以换行,但如果在字符串中部换行,不想用newline()方法该如何做呢?使用\n是无法实现的,使用\n后,只会出现一个空格,并未实现换行,在想要实现换行的地方加入\r\n就可以了例如Filefile=newFile(“d:/ioPractice/text.txt”);Writerfw=newFileWrite

  • keil5 debug调试_java怎么远程调试

    keil5 debug调试_java怎么远程调试文章目录前言一、进入调试二、介绍调试工具栏二、搜索寻找三、特殊的窗口1.命令输出窗口2.寄存器窗口3.汇编语言窗口4.变量查看窗口5.检测自己想要看的总结前言其实我经常用的调试方法是在指定行加Printf();通过串口查看打印的信息,就知道执行到哪一步。但是这是很麻烦的。程序由上而下的执行顺序不会变的。debug调试也是从主函数开始这样调试的。一步一步的运行调试程序检查错误,或者直接运行到某处,二话不多说,开整!一、进入调试二、介绍调试工具栏1.复位按钮:(类似于用复位按键..

    2022年10月15日
  • matlab的fread函数的用法_matlab fread 大小端

    matlab的fread函数的用法_matlab fread 大小端fread函数常见用法:1、A=fread(fileID,sizeA,precision,skip,machinefmt) 2、A=fread(fileID)3、fread(fileID,sizeA)4、A=fread(fileID,sizeA,precision)5、A=fread(fileID,sizeA,precision,skip)6、A=fread(fileID,sizeA,p

  • 1g的树莓派4b能做什么_树莓派4B开发板简介

    1g的树莓派4b能做什么_树莓派4B开发板简介树莓派简介RaspberryPi(中文名为“树莓派”,简写为RPi,(或者RasPi/RPI)是为学生计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux,随着Windows10IoT的发布,我们也将可以用上运行Windows的树莓派,别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全。树莓派由注册于英国的慈善组织“Raspber…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号