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


相关推荐

  • 如何将pdf转换成word的3种免费方法「建议收藏」

    如何将pdf转换成word的3种免费方法「建议收藏」怎样将PDF转成Word?这是很多网友经常问到的问题,PDF转换成Word利用一些小技巧和工具,你会发现是很容易的,以下的PDF转Word的3种免费方法你一定要看一看。1、“复制/粘贴”大法在寻找如何将PDF转换成Word的“高级”办法之前,不妨先试一下最傻瓜的方法:首先用极速PDF阅读器打开PDF文档,选择文本内容后右击选择“复制选择内容”或直接使用“全选”;接着新建一个Word文档后,直接将内容在Word中粘贴即可。如果文档格式不复杂,这样得到的Word就够用了,当然有些可能排版会比较乱。2、G

    2022年6月1日
    62
  • linux重启网卡命令失败_centos7网卡重启

    linux重启网卡命令失败_centos7网卡重启  首先,命令ifconfig查看网卡状态,发现eth0网卡未启动。  然后,用命令ifupeth0启动网卡。   用命令ifdowneth0则是卸载网卡。转载于:https://www.cnblogs.com/dayboy2416/p/11231314.html…

    2022年9月22日
    6
  • redis缓存雪崩 缓存穿透 缓存击穿如何解决_防止redis缓存击穿

    redis缓存雪崩 缓存穿透 缓存击穿如何解决_防止redis缓存击穿缓存的击穿、穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题。不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的。而且,网络上仍然充斥着,大量不太靠谱的解决方案,难免误人子弟。我的这篇文章,则会对这三大缓存问题,做一个深入的探讨和分析。最有价值的,不是答案本身,而是诞生答案的过程。缓存击穿缓存击穿是什么,大家应该心里都清楚,我只做一个简单通俗的解释:…

    2025年11月14日
    3
  • rehash过程_contenthash

    rehash过程_contenthash步骤1)首先创建一个比现有哈希表更大的新哈希表(expand)2)然后将旧哈希表的所有元素都迁移到新哈希表去(rehash)dictAdd对字典添加元素的时候,_dictExpandIfNeeded会

    2022年8月3日
    4
  • PyCharm 插件推荐[通俗易懂]

    PyCharm 插件推荐[通俗易懂]安装插件的教程请看文章:https://blog.csdn.net/weixin_39020133/article/details/1056537941、主题插件MaterialThemeUI,效果图如下:2、远程调试服务器插件AlibabaCloudToolkit…

    2022年6月24日
    24
  • Linux-Memory小记

    Linux-Memory小记

    2022年2月23日
    37

发表回复

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

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