zoukankan      html  css  js  c++  java
  • Spring 基础概念——DI、IOC(一)

    一、IOC 控制反转

    package com.qunar.studyspring.bean;
    
    import com.qunar.studyspring.dao.PersonDao;
    import com.qunar.studyspring.object.Person;
    
    /**
     * 这是一个没有控制反转的例子
     * @author liqiu
     *
     */
    public class PersonServiceBean {
        private PersonDao personDao = new PersonDao();
    
        public void save(Person person) {
            personDao.save(person);
        }
    }

    在解释什么是控制反转之前,先介绍没有出现这个技术之前的例子。如上面所示,PersonDao是直接引用的,也就是说我要在哪里使用PersonDao,就要在哪里初始化它,像是废话是吧,没关系,再看下面的控制反转的例子:

    package com.qunar.studyspring.bean;
    
    import com.qunar.studyspring.dao.PersonDao;
    import com.qunar.studyspring.object.Person;
    
    /**
     * 这是一个没有控制反转的例子
     * @author liqiu
     *
     */
    public class PersonServiceBean {
        private PersonDao personDao;
    
        //咱们在构造方法内(也可以采用set方法),将对象注入到应用里面,也就是应用里面的personDao是由外部容器负责创建的
        public PersonServiceBean(PersonDao personDao){
            this.personDao = personDao;
        }
        
        public void save(Person person) {
            personDao.save(person);
        }
    }

    区别就是在PersonServiceBean中,什么时候创建personDao,自己不知道,有外面调用它的程序控制。也就是说所谓控制反转就是把依赖对象交给外部容易负责创建。

    二、DI 依赖注入

    所谓依赖注入就是:在运行期间,由外部容器动态将依赖对象注入到组件中。

    那么依赖注入和控制反转有啥区别哪?引用网络上面的一段话:“依赖注入和控制反转是对同一件事情的不同描述,只是它们描述的角度不同。依赖注入是从应用程序的角度在描述,即:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,既:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。”

    三、使用Spring的好处:

    1、解耦:Control、Service和Dao相互不在直接声明使用

    2、事物管理服务、JMS服务、持久化等等

    3、支持单例模式

    4、支持AOP技术,面向切面开发

    5、有很多的辅助类:JdbcTemplate、HibernateTemplate

    6、支持主流框架的集成:Hibernate、Struts等

    四、轻量级框架和重量级框架的区别

    主要区别是:启用服务的多少。

    Spring是否是重量级框架?如果仅仅使用Spring的默认服务,那么就是轻量级框架,如果其他的服务都打开使用的话就是重量级框架。

  • 相关阅读:
    30个php操作redis经常用法代码样例
    Android语音播报、后台播报、语音识别
    Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
    如何运营一个软件微社区
    关于迭代测试的一些思考
    DirectUI界面编程(五)WindowImplBase的使用
    Zxing实现在线二维码生成程序
    Java二维码生成与解码工具Zxing使用
    DirectUI界面编程(四)界面布局详解
    软件开发中的资源管理
  • 原文地址:https://www.cnblogs.com/liqiu/p/3916328.html
Copyright © 2011-2022 走看看