• IoC控制反转


    IoC控制反转

    核心概念

    1. IoC(Inversion of Control)控制反转

    使用对象时,由主动new产生对象转换成,从外部提供对象,在这个过程中,对象的创建控制权由程序转移到外部,此思想称为控制反转。

    2. DI(Dependency Injection)依赖注入

    在容器中建立bean与bean之间的依赖关系的整个过程,成为依赖注入。

    3. Spring技术对IoC思想进行了实现

    Spring提供了一个容器,称为IoC容器,用来充当IoC思想的外部。
    IoC容器负责对象的搭建,初始化一系列工作,被创建或者被管理的对象在IoC容器中统称为Bean。
    目标:充分解耦
    使用IoC容器管理Bean(IoC)。
    在IoC管理容器内将有依赖关系的Bean进行关系绑定(DI)。
    最终效果:使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean 已经绑定了所以的依赖关系。
    Demo:

    在这里插入图片描述
    当代码需要修改时,需要重新修改代码,编译程序,并部署发布,非常耗时废力。代码书写现状:耦合度偏高
    解决方案:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象。
    IoC(Inversion of Control)控制反转

    对象的创建权由程序转移到外部,这种思想称为控制反转。

    4. IoC入门案例思路分析:
    1. 管理什么(Service与Dao)
    2. 如何将被管理的对象告知IoC容器(配置)
    3. 被管理的对象交给IoC容器,如何获取到IoC容器(接口)
    4. IoC容器得到后,如何从容器中获取bean(接口方法)
    5. 使用Spring导入哪些坐标(pom.xml)
    5. DI入门案例思路分析:
    1. 基于IoC管理bean
    2. Service中使用new形式创建的Dao对象是否保留(否)
    3. Service中需要的Dao对象如何进入到Service中(提供方法)
    4. Service与Dao间的关系如何描述(配置)
    6. 项目结构

    在这里插入图片描述

    附录
    1. pol.xml
    
        
            org.springframework
            spring-context
            5.2.10.RELEASE
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2. applicationContext.xml
    
    
    
    
    
       
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    3. APP.java
    //3.获取IoC容器
    ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
    //4.获取bean
    BookDao bookDao=(BookDao) ctx.getBean("bookDao");
    bookDao.save();
    BookService bookService=(BookService) ctx.getBean("bookService");
    bookService.save();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4. BookServiceImpl.java
    //5.使用业务层中使用new的方式创建的dao对象
    private BookDao bookDao;
    //6.提供对应的Set方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    public void save(){
        System.out.println("book service save ...");
        bookDao.save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    最后

    深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

  • 相关阅读:
    AVX图像算法优化系列一: 初步接触AVX。
    Mysql 8.0.30 的查询包含自定义函数的表时,比8.0.27 慢了好几倍
    笔试强训(二十五)
    【React】05.JSX语法使用上的细节
    得物 API 一站式协作平台探索与落地
    iPhone如何恢复出厂设置?苹果手机恢复出厂设置教程【3种方法】
    【小黑送书—第三期】>>《深入浅出SSD》
    股票买卖问题I、II、III、IV、V、VI
    [免费专栏] Android安全之绕过直连、HOST校验、系统证书校验、代理检测、双向认证抓HTTPS数据
    【Nuxt3】Vue3 + Element-plus 打包后报错 @popperjs/core
  • 原文地址:https://blog.csdn.net/m0_67401382/article/details/126801794