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月25日
    26
  • 界面无小事(五):自定义TextView

    界面无小事(五):自定义TextView

    2021年6月9日
    139
  • php实现微信扫码登陆,PHP实现微信开放平台扫码登录源码下载[通俗易懂]

    php实现微信扫码登陆,PHP实现微信开放平台扫码登录源码下载[通俗易懂]1、首先到微信开放平台申请https://open.weixin.qq.com/获取到appid和APPSECRET,前台显示页面如下varobj=newWxLogin({id:”login_container”,appid:”wxed782be999f86e0e”,scope:”snsapi_login”,redirect_uri:encodeURIComponent(“htt…

    2022年5月31日
    36
  • 深入分析C++引用

    深入分析C++引用

    2021年12月2日
    113
  • oracle+mybatis分页查询

    oracle+mybatis分页查询当使用oracle进行分页查询时使用以下方式:SELECT* FROM(SELECTA.*,ROWNUMRN     FROM(selectt.name   asname,           t.formula asformula,           t.data_fromasdataFro

    2022年5月6日
    38
  • 常见电机分类和驱动原理动画[通俗易懂]

    常见电机分类和驱动原理动画[通俗易懂]常见电机分类和驱动原理动画文章目录常见电机分类和驱动原理动画基本分类直流有刷电机直流无刷电机(BLDC)步进电机(Steppermotor)舵机(steeringengine)伺服电机(servomotor)基本分类直流有刷电机电机的基本原理就是电磁感应:旋转磁场带动转子转动。电动机是由定子和转子组成,一个产生旋转磁场,一个为磁极,电机的转子(轴承)就转起来了。这便实现了电能->磁能->机械能的转换直流无刷电机(BLDC)BLDC的定子(stator)是通电的线圈,而

    2022年6月10日
    40

发表回复

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

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