Spring02:IOC理论推导

2、IOC理论推导

  1. IOC(inversion of control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法

  2. 之前我们要写一个业务应该写一下这几步:

    1. UserDao接口

    2. UserDaoImplement实现类

    3. UserService业务接口

    4. UserServiceImplement实现类

    5. 外界只需要调用service层就可以了,不用看到Dao

    6. 注:这样子我们的代码量特别大,要是UserDao的实现类特别多,在UserServiceImpl中想调用不同的UserDao实现类, 那我们就要修改代码去完成不同的多态,这样会显得非常麻烦

      private UserDao dao = new UserDaoMysql();
      private UserDao dao = new UserDaoSQLServer();
      private UserDao dao = new UserDaoOracle();
      // 等等....
      // 我们需要使用dao层的不同实现类,需要去service实现类里面修改对应的实现,特别麻烦
      
  3. 我们在UserService的实现类中使用set方法(接口)实现,相对以前,发生了革命性的变化。

    private UserDao dao;
    //使用set方法,动态的控制UserDao对象的创建,通过多态
    //我们在调用方法的时候,传入该接口(这个接口是dao接口)的不同实现类
    public void setDao(UserDao dao) {
        this.dao = dao;
    }
    
  4. 现在去我们的测试类里 , 进行测试 :

    //我们在调用方法的时候,传入该接口(这个接口是dao接口)的不同实现类
    @Test
    public void test(){
        UserServiceImpl service = new UserServiceImpl();
        service.setUserDao( new UserDaoMySqlImpl() );
        service.getUser();
        //那我们现在又想用Oracle去实现呢
        service.setUserDao( new UserDaoOracleImpl() );
        service.getUser();
    }
    
  5. 之前,程序是主动创建对象,控制权在程序员手上,用户的每一次需求,我们都回去该后端的代码,Dao是写死的

    //写死了
    private UserDao dao1 = new UserDaoImol1();
    private UserDao dao2 = new UserDaoImol2();
    private UserDao dao3 = new UserDaoImol3();
    
  6. 现在使用了set注入之后,程序不再具有主动性,而是变成了被动的接受对象!

  7. 这种思想,从本质上解决了问题,我们程序员不再去管理对象的创建了,系统的耦合性大大降低,可以更加专注的在业务的实现上!这是ICO的原型

  8. 个人认为,所谓的控制反转, 就是:获得依赖对象的方式反转了

    原来:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQFYQroU-1594094616225)(Spring01.assets/image-20200611155604151.png)]
    IOC:
    在这里插入图片描述



IOC本质

  1. 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

  2. img

  3. IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。

  4. Spring容器在初始化时**先读取配置文件**,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器(其实就是配置文件中的beans)中取出需要的对象。

    img

  5. 采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

  6. 控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值