对IOC的一点学习笔记


IOC (Inversion of Control):控制反转

DI (Dependency Injection):依赖注入


1、在没有使用IOC的情况下是如何进行的

在UserController中需要用到UserService的相关逻辑来实现对应的增删改查功能,那么需要在UserController中直接 new UserService();

对于一个UserService来说还好,假如我有若干个Service需要使用,每个地方都使用new来创造一个对象供自己使用?如果我每个Service都有若干种实现,那么分别进行new?这样太累了。

2、IOC Service Provider登场

我们需要使用一个对象,但是又不想自己动手去创造,那有没有别人来帮我们做这些基础工作?然后我们就集中精力关注我们要关注的业务点?

有,来帮我们做这件事情的就是IOC Service Provider。

我们需要什么的时候,完全交给它来帮我们创建,它知道我们需要什么。

我们缺乏什么的时候,也可以主动找它要,它拥有我们想要的。

我们将自己创建对象的控制权交给它,我们把自己的依赖来交给它管理,这就是----控制反转\依赖注入。

3、IOC Service Provider是什么

IOC Service Provider是一个抽象概念,它指任何一种将IOC场景中的业务对象绑定到一起的实现方式,可以是一段代码,也可以是一组相关的类,或者是比较通用的IOC框架或者IOC容器实现。

而我们使用的Spring,它的IOC容器就是:

  • BeanFactory:最基础的IOC服务支持,采用延迟初始化策略。
  • ApplicationContext:在BeanFactory的基础上构建,相对比较高级的容器实现,还有比如事件发布、国际化支持等。可以使用及时加载,容器在启动之后自动完成初始化绑定。

4、IOC容器到底在背后做什么

毫无疑问,它最基本的两个职责就是:

  • 业务对象的构建管理:负责创建系统中的一切需要的对象
  • 业务对象间的依赖绑定:将这些创建好的对象组织在一起让它们一起好好工作

5、我们怎么使用IOC

使用过 @Controller @Service @Resource @Autowired 这些注解吧?

IOC随笔小记录的更多相关文章

  1. Java 需要记得、了解的关键词 (Java 学习中的小记录)

    Java 需要记得.了解的关键词 (Java 学习中的小记录)     作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用

  2. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  3. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  4. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  5. html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)

    html/css  盒子布局 Margin .Padding .border 以及 清除浮动的知识 (学习HTML过程中的小记录) 作者:王可利(Star·星星) width     是"宽 ...

  6. NDK开发小记录 C++读取java层对象内容

    这是自己NDK开发得小记录,关于C++层读取java层传来的对象内容. 很简单的一个例子, 1.首先在java层定义了一个类NumList: public class NumList { public ...

  7. centos 6.X minimal 系列最小化安装完成后,安装mono和jexus过程小记录

    在使用虚拟机安装minimal版centos运行mono+jexus的时候,遇到了一些坑,记录一下,比如虚拟机访问不了网络,没wget命令没开放80端口,等等小问题,其他网上教程已经有mono+jex ...

  8. Backbone小记录

    前言 这两天看了下Backbone.js的知识,大概了解了这个框架的一些知识. 写篇博客总结一下. Backbone.js是一个web端javascript的轻量级MVC框架.为什么说是轻量级呢?因为 ...

  9. HorizontalScrollView做页卡的一个小记录

    用HorizontalScrollView做页卡,实现一个如下图的效果:

随机推荐

  1. 攻防世界 reverse hackme

    hackme XCTF 3rd-GCTF-2017 __int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; / ...

  2. Redis入门到放弃系列-redis数据类型

    Redis数据类型? Redis 提供一些常用的数据类型:Strings.Lists.Sets.Sorted sets.Hashes.Arrays.Bitmap.Streams Strings(字符串 ...

  3. markdown快捷输入

    标题: 输入方式:#+空格+标题名,几级标题就敲几个# 注:最大支持六级标题 字体 加粗:在要加粗的字体前后加** 斜体:在要倾斜的字体前后加* 斜体加粗:在要倾斜并加粗的字体前后加*** 删除线:在 ...

  4. 什么是 Jenkins? 运用Jenkins持续集成

    [注]本文译自:https://www.edureka.co/blog/what-is-jenkins/   持续集成是 DevOps 最重要的部分,用于集成各个 DevOps 阶段.Jenkins ...

  5. 面试官:Java中线程是按什么顺序执行的?

    摘要:Java中多线程并发的执行顺序历来是面试中的重点,掌握Java中线程的执行顺序不仅能够在面试中让你脱颖而出,更能够让你在平时的工作中,迅速定位由于多线程并发问题导致的"诡异" ...

  6. Leedcode算法专题训练(链表)

    1.发现两个链表的交点 160.两个链表的交集(容易) Leetcode /力扣 public class Solution { public ListNode getIntersectionNode ...

  7. Spring Security OAuth 2.0 发放令牌接口地址自定义

    OAuth 2.0 如何获取令牌 以密码模式为例,获取 Token curl --location --request POST 'http://oauth-server/oauth/token' \ ...

  8. Vue CLI 是如何实现的 -- 终端命令行工具篇

    Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供了终端命令行工具.零配置脚手架.插件体系.图形化管理界面等.本文暂且只分析项目初始化部分,也就是终端命令行工具的实现. 0. 用法 ...

  9. NTP时间同步服务

    NTP时间服务器 作用:ntp主要是用于对计算机的时间同步管理操作. 时间是对服务器来说是很重要的,一般很多网站都需要读取服务器时间来记录相关信息,如果时间不准,则可能造成很大的影响. 部署安装NTP ...

  10. Boxes in a Line UVA - 12657

      You have n boxes in a line on the table numbered 1...n from left to right. Your task is to simulat ...