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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jvm的垃圾回收器_java 垃圾回收器

    jvm的垃圾回收器_java 垃圾回收器1.GC分类按线程数:并行垃圾回收器:ParallelCollector.同一时间段内只有一个cpu执行垃圾回收操作.用户线程等待. 串行垃圾回收期:SerialCollector.同一时间段内可以有多个cpu执行垃圾回收操作,用户线程等待.按压缩方式:压缩式,内存有序.非压缩式:内存无序.按工作方式:并发式,及并发GC,用户线程和垃圾回收器同时交替进行. 独占式,垃圾回收线程进行时,用户线程需要等待.按工作区分:年轻代,老年代.2.GC性能指标吞吐量:用户线

    2025年10月26日
    2
  • java简单入门教程_史上最快速最简单的java入门教程

    java简单入门教程_史上最快速最简单的java入门教程原标题:史上最快速最简单的java入门教程§java是什么?Java是一门开发软件的程序语言,用于编写比如:办公自动化软件、超市的销售系统、银行交易系统等程序软件.§准备写Java程序。准备工作分为三步:第一步:下载安装JDK开发环境(建议官网下载),基本都是下一步。第二步:配置JDK环境变量,主要配置bin和classpath(主要为了在控制台能方便执行程序。如果不怕麻烦,此步可以省略)。具体…

    2022年7月8日
    23
  • mac datagrip2021.4激活码_通用破解码

    mac datagrip2021.4激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    100
  • Error filterStart startup failed due to previous errors

    Error filterStart startup failed due to previous errorsErrorfilterStartstartupfailedduetopreviouserrors2007-2-2315:06:44org.apache.catalina.core.AprLifecycleListenerlifecycleEvent信息:TheApacheTomcatNativelibrarywhichallowsoptimalperformanceinproductionenvironmentswasnotfoundonthe

    2022年7月11日
    21
  • 滤波算法(四)—— 卡尔曼滤波算法

    滤波算法(四)—— 卡尔曼滤波算法一、算法介绍卡尔曼滤波是一个神奇的滤波算法,应用非常广泛,它是一种结合先验经验、测量更新的状态估计算法。1、状态估计首先,对于一个我们关心的物理量,我们假设它符合下面的规律其中,为该物理量本周期的实际值,为该物理量上一个周期的实际值,当然这个物理量可能不符合这个规律,我们只是做了一个假设。不同的物理量符合的规律不同,是我们的经验,我们根据这个规律…

    2022年6月13日
    54
  • wps怎么做时间线_wps中的word文档如何制作时间轴「建议收藏」

    wps中的word文档如何制作时间轴很多小伙伴不知道wps中的word文档还可以制作时间轴哦,下面小编介绍一下具体办法。具体如下:1.打开一个空白的word文档,点击菜单栏的【插入】,单击选择一个带箭头的线条,在文档上面留一点空白写标题,然后插入线条拉到底部,还可以设置线条颜色,虚实等样式。2.点击工具栏中的【文本框】旁边的倒三角,再点击【多行文字】,插入一个大的文本框3.可以根据需要进行文…

    2022年4月10日
    198

发表回复

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

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