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对象中的所有属性,由容器注入!

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

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

(0)
上一篇 2022年6月20日 下午10:36
下一篇 2022年6月20日 下午10:36


相关推荐

  • Chrome 146 来了:OpenClaw 操控浏览器最大的几个坑,终于有解了

    Chrome 146 来了:OpenClaw 操控浏览器最大的几个坑,终于有解了

    2026年3月17日
    2
  • 关于华为任正非裁员事件

    关于华为任正非裁员事件最近,关于“华为大力清洗34岁+的老员工”的新闻一直在发酵。消息是从华为的心声论坛传出,具体内容是华为职工反映,中国区开始集中清理34岁以上的的交付工程维护人员。而研发开始集中清退40岁以上的老员工,主要针对程序员。一时间,“华为无情”批评四起。  无风不起浪  华为公关对消息予以否定。但这件事明显已经掀起了不小的波澜。  创始人任正非近期在一份讲话中侧面回应了

    2022年7月17日
    53
  • 深入理解java反射机制

    深入理解java反射机制一,java的核心机制java有两种核心机制:java虚拟机(JavaVirtualMachine)与垃圾收集机制(Garbagecollection):Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在其上面运行Java代码编译后的字节码程序,java虚拟机实现了平台无关性。Java垃圾回收(GarbageCollection):自动释放不用对象

    2022年5月10日
    35
  • 调制解调器(Modem)

    调制解调器(Modem)调制解调器调制解调器 英语 Modem modulator demodulator 的英文缩写 是一个将数字信号调变到模拟信号上进行传输 并解调收到的模拟信号以得到数字信号的电子设备 它的目标是产生能够方便传输的模拟信号并且能够通过解码还原原来的数字信号 根据不同的应用场合 调制解调器可以使用不同的手段来传送模拟信号 比如使用光纤 射频无线电或电话线等 使用普通电话线音频波

    2026年3月18日
    2
  • java中数组转List

    java中数组转List1 javajdk 提供的 Arrays asList T a 方法 publicstatic String args String strArray a b c List String strList Arrays asList strArray Sy String

    2026年3月17日
    1
  • java项目管理软件系统springboot+mysql+layui+mybatis-plus进销存源码

    java项目管理软件系统springboot+mysql+layui+mybatis-plus进销存源码进销存软件源代码,编程语言为java注意事项(1)用户名:admin;密码:123456。采用springboot+mysql+layui+mybatis-plus技术,用idea开发工具可直接打开!

    2022年5月31日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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