(一)IOC基础推导及理论

环境准备:见java环境搭建,新建maven项目

1、写一个UserDao接口

public interface UserDao {
    public void getUser();
}

2、再写Dao的实现类

public class UserDaoImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("获取用户数据");
    }
}

3、写UserService的接口

public interface UserService {
    public void getUser();
}

4、写Service的实现类

public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImpl();

    public void getUser() {
        userDao.getUser();
    }
}

5、测试一下

@Test
public void test(){
    UserService service = new UserServiceImpl();
    service.getUser();
}
 
6、假设UserDao有多个实现类,UserDaoImplA和UserDaoImplB,分别实现不同的业务,需要新增这两个实现类。
public class UserDaoImplA implements UserDao{
    public void getUser() {
        System.out.println("获取A用户数据");
    }
}
public class UserDaoImplB implements UserDao{
    public void getUser() {
        System.out.println("获取B用户数据");
    }
}

对于用户来说只调用service层,不用了解dao层。当用户需求发生变化时,比如用户需要调用A用户数据,那么我们只能去修改service层代码来满足需求。

public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImplA();
//修改UserDao的实现类
    public void getUser() {
        userDao.getUser();
    }
}

需求一旦产生变化,就需要修改serivce代码,因此需要解耦,在service层留下set接口

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    // 利用set实现
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void getUser() {
        userDao.getUser();
    }
}

然后再看用户如何灵活使用,即使需求产生变化,也不用修改service层代码

    @Test
    public void test(){
        UserServiceImpl service = new UserServiceImpl();
        //需要A用户数据
        service.setUserDao( new UserDaoImplA() );
        service.getUser();
        //需要B用户数据
        service.setUserDao( new UserDaoImplB() );
        service.getUser();
    }

总结:

之前所有东西都是由程序去进行控制创建 , 而现在是由用户自行控制创建对象 , 把主动权交给了用户 .

程序不用去管怎么创建,怎么实现了 . 它只负责提供一个接口 .

这种思想 , 从本质上解决了问题 , 我们程序员不再去管理对象的创建了 , 更多的去关注业务的实现 . 耦合性大大降低 . 这也就是IOC的原型 !

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

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

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

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

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

 

原文地址:https://www.cnblogs.com/alanchenjh/p/12255643.html

时间: 2024-10-31 10:34:15

(一)IOC基础推导及理论的相关文章

spring学习——Ioc基础三(Ioc配置使用)

一.XML配置的结构  一般配置文件结构如下: <beans>       <import resource="resource1.xml"/>       <bean id="bean1"class=""></bean>       <bean id="bean2"class=""></bean>   <bean name=&q

计算机网络基础学习笔记——理论

历史:第一代:50年代:(多台)终端(terminal)-->计算机(host) 缺点:1.主机负荷重,效率低.  2.终端速率低,线路利用低,费用高. 60年代:通信控制处理机CCP(communication control processer)或FET(front end processor)    集中器.第二代:60年代末:计算机--计算机   1969年,美国国防部国防高级研究计划署(简称ARPA Advanced Research Project Agency)试验.   1972

Java Web基础 --- Servlet 综述(理论篇)

摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Servlet 的产生动机,并揭示了 Servlet 的本质以及其在标准MVC模式中所扮演的角色.紧接着,给出了 Servlet族的继承结构,并对族内的接口和抽象类作了进一步的介绍,并给出开发一个Servlet程序的常用做法.在此基础上,我们图文并茂地介绍了 Servlet 的生命周期与执行流程,清晰展现

Spring ioc基础内容

1 BeanFactory与ApplicationContext区别 BeanFactory是Spring框架中IoC容器的顶层接?,它只是?来定义?些基础功能,定义?些基础规范,?ApplicationContext是它的?个?接?,所以ApplicationContext是具备BeanFactory提供的全部功能的.通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的?级接?,?BeanFactory要拥有更多的功能,?如说国际化?持

(spring-第14回【IoC基础篇】)国际化信息 (转)

国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作系统决定使用哪一种语言. 一般由两个条件限定一个国际化类型:语言类型和国家/地区类型.比如: 中文:语言类型:zh,国家/地区类型:CN(中国大陆)/HK(中国香港)/TW(中国台湾). 英语:语言类型:en,国家类型:EN. ------------------------------------

spring学习——Ioc基础一

一.IoC是什么 IOC--Inversion of Control Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了",那我们来深入分析一下: 谁控制谁,控制什么:传统Java SE程序设计,我们直接在对

(spring-第14回【IoC基础篇】)国际化信息

国际化又称为本地化. 当你把手机的language由中文切换到英文时,你的微信也相应改用英语,这就是i18n国际化.一般来说,应用软件提供一套不同语言的资源文件,放到特定目录中,应用根据不同语言的操作系统决定使用哪一种语言. 一般由两个条件限定一个国际化类型:语言类型和国家/地区类型.比如: 中文:语言类型:zh,国家/地区类型:CN(中国大陆)/HK(中国香港)/TW(中国台湾). 英语:语言类型:en,国家类型:EN. ------------------------------------

浅析 Spring IoC - 基础概念

1. IoC是什么? IoC(Inversion of Control)即控制反转,不是什么技术,而是一种设计思想.在Java开发中,IoC 意味着将你设计好的对象交给容器去控制,而不是传统的在对象内部直接控制(比如说 new 一个对象).理解好 IoC 的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了": 谁控制谁,控制什么:传统Java SE 程序设计,我们直接在对象内部通过 new 创建对象,是程序主动去创建依赖对象:而 IoC 是由 IoC

spring学习——Ioc基础二

一.IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装.在Spring中BeanFactory是IoC容器的实际代表者. Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配.一般使用基于xml配置文件进行配置元数据,而且Sprin