对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. 电影AI修复,让重温经典有了新的可能

    摘要:有没有一种呈现,不以追求商业为第一目的,不用花大价钱,不用翻拍,没有画蛇添足,低成本的可共赏的让经典更清晰? 本文分享自华为云社区<除了重映和翻拍,重温经典的第三种可能>,原文作者: ...

  2. Logtash遇到的异常和注意点

    1.Logtash遇到的异常和注意点 1.1 logstash使用kafka插件和es集成 如果logstash使用kafka插件和es集成,必须设置kafka插件参数 session_timeout ...

  3. Ceph 14.2.5-K8S 使用Ceph存储实战 -- <6>

    K8S 使用Ceph存储 PV.PVC概述 管理存储是管理计算的一个明显问题.PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息.于是引入 ...

  4. 基于vite2的react脚手架

    vite-react-boilerplate 开发编译 yarn start 启动开发 yarn build 启动编译 代码质量和风格 husky/lint-staged/eslint/prettie ...

  5. MySQL-一条sql语句的执行顺序

    手写: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_tab ...

  6. 《青橙商城》day01避坑指南

    1.persistence-api报红 问题: 在模块qingcheng_pojo下的pom.xml中,报红 <dependencies> <dependency> <g ...

  7. Hadoop完整搭建过程(一):本地模式

    1 本地模式 本地模式是最简单的模式,所有模块都运行在一个JVM进程中,使用本地文件系统而不是HDFS. 本地模式主要是用于本地开发过程中的运行调试用,下载后的Hadoop不需要设置默认就是本地模式. ...

  8. 【学习底层原理系列】重读spring源码3-加载beanDefinition的方法obtainFreshBeanFactory

    obtainFreshBeanFactory()方法概述 定义BeanFactory,并加载以下两种bean的定义,装配到BeanFactory: 1.配置文件中定义的bean 2.通过<con ...

  9. 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?

    尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...

  10. 使用Font Awesome替换EasyUI的图标

    用过EasyUI的朋友都知道,大部分组件都有一个iconCls属性,用于显示一个图标.但是EasyUI自带图标数量少.不美观,于是想到了使用Font Awesome来更换和拓展这些图标. 先看看Eas ...