栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Spring(一、IOC思想与DI实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring(一、IOC思想与DI实现

一、IOC思想(控制反转)

在正式学习ioc之前,我们先讲一个故事。

有一天,早上起来后的小白同学感觉头晕晕的好似发烧了,于是他来到药店准备找医生开点药吃吃,可当他到药店后,却发现医生都不见了。无奈之下小白同学只好自己去药房的找点药吃,可是小白只是一个苦逼的程序猿,哪里知道自己该吃什么药呢,于是他拿起手机一顿搜索,这时他看到了一篇推文:《震惊!x某误食x药导致x痿》,他开始害怕了,不敢自己胡乱拿药。他的头更痛了,他多想有个医生出来告诉他该吃什么药呀!

故事到这里结束了,现在我们用编程的思路描述一下这个故事 

小白想治好头疼:需求

药店里的各种药品:对象  

未曾出现的医生:管理药品(对象)的人:IOC容器 

当然,这里的各种药品彼此之前存在着某种联系和依赖(药不能乱吃哦~) 

我们想要实现的效果是:当一个需求产生后,我们可以不再关注对象与对象之间的依赖和联系,反转让IOC容器把我们需要的对象生成出来

对象不依赖于其它对象,不依赖于其它对象,这就达到了松耦合。 

高耦合:

                                    

解耦: 

                                 

 控制:我们不在自己new出对象,而是将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制 反转:由容器来帮忙创建及注入依赖对象,由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转,依赖对象的获取被反转了。

IOC思想总结:使用对象时,由主动new产生对象转换为“外部”提供对象,此过程中对象的创建权由程序内部转换到“外部”,这就是控制反转 Spring提供了这么个容器,称为IOC容器,用来充当IOC思想里的“外部”。IOC容器负责对象的创建、初始化等工作,被管理的对象统称为Bean

 

二、DI(依赖注入)

我认为,IOC和DI本质上是同一种东西,DI只是实现IOC思想的方式

在IOC容器中为Bean与Bean之间建立起依赖关系的整个过程,就是DI(依赖注入)

现在我们来实现一个DI的案例

在pom.xml导入spring依赖

        
            org.springframework
            spring-webmvc
            5.3.9
        
 DAO:
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("人家是Dao啦~~~~~~~~~");
    }
}
SERVICE:
public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();

    @Override
    public void save() {
        System.out.println("人家是Service啦~~~~~~~~~");
        bookDao.save();
    }
}
测试类:
public class testDemo {
    @Test
    public void test(){
        BookService bookService = new BookServiceImpl();
        bookService.save();
    }
}
测试结果:

 现在我们改用DI注入完成该操作

创建applicationContext.xml




    

    
        
        
        
    

 修改Service 

 

 这里的setBookDao方法是由IOC容器自动调用的

 修改测试类

public class testDemo {
    @Test
    public void test(){
        //1,获取IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2,从容器中得到Bean
        //传入容器里的ID值,返回的是Objece属性我们转换一下
        BookService bookService = (BookService) ctx.getBean("bookService");
        //3,调用方法
        bookService.save();

    }
}

  查看结果

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号