为什么会出现容器的注入?

  容器:顾名思义,装东西的器物。

至于spring中bean,aop,ioc等一些都只是实现的方式;具体容器哪些值得我们借鉴,我个人觉得是封装的思想。将你一个独立的系统功能放到一个容器之中,可以当做一个大的接口被别人使用,也可以更好的规范标准。

  云计算解决了计算机基础设施计算、网络、存储这几个方面的弹性问题,但是它遗留了两个问题
       应用的扩展问题
      迁移性问题

在云计算环境下,人们想出了两种方法解决问题。一是通过自动化脚本,然而不同的环境千差万别,一个脚本往往在一个环境上运行正确,到另一个环境就不正确了。二是通过虚拟机镜像,然而虚拟机镜像太大了,动不动就几十个G,拷贝和下载都太费时间。

于是乎,大牛们考虑是否存在着更加轻量级的虚拟化方式,更容易去迁移,也更容易扩展应用层业务的虚拟化方法。有人根据集装箱的设计思想来设计了更轻量级的虚拟化技术。
在集装箱出来之前,货物搬运需要来回的卸货装货,如下图所示,并且物品与物品之间的隔离性很差,如果船上的货物有水果、有铁桶等,那么水果很容易被其他硬的东西挤坏。
  

  因此,为了解决这个问题,有人提出了集装箱技术。其一是为了能够更好的进行迁移,省去了中间来回搬货卸货的问题;其二是为了进行隔离,让不同的物品之间分隔开,互不影响。
借鉴与传统运输业的解决方案,有人提出使用类似集装箱的方式封装应用和应用运行的环境(应用运行所需要的依赖关系),也就是将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器

容器技术有很多种,docker只是其中一种,只不过docker的流行度较高。
       要实现类似于集装箱的这种封装技术,需要两大技术,其一是Namespace,在不同Namespace中的应用可以有独立的网络资源、用户空间、进程号等;其二是Cgroups,可以把cpu、内存等资源进行隔离让容器使用,可以实现对容器资源的限制,限制容器能够使用的cpu和内存资源,避免单个容器出错,耗尽所有系统资源。

container设计的思想

经典的两个知识点:1、控制反转;2、依赖注入。

一、控制反转

每个对象自身对于逻辑的执行能力,被其所依赖的对象反向控制了,这也就是控制反转的本质含义。
软件之父为了解决与业务逻辑完好的解耦,从而又能实现一个额外的编程元素容器来帮助进行对象的生命周期管理!提出了容器的构建规则:

1、容器应该被设计成一个全局的,统一的编程元素;
2、在最大程度上降低容器对业务逻辑的入侵;
3、容器应该提供简单而全面的对象操作接口。

二、依赖注入

只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过
JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)。
       在这里要提示一下,本次我所说的容器是container(由一系列对象的操作接口构成,其中应该至少包含获取对象实列以及管理对象之间的依赖关系这两类操作方法),而不是collection(用于表述一组对象的集合)!

原文:https://blog.csdn.net/liliang_11676/article/details/78753291 
https://blog.csdn.net/gui951753/article/details/81504318

Java中的容器和注入分析的更多相关文章

  1. Java EE中的容器和注入分析,历史与未来

    Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...

  2. (转)Java中的容器详细总结

    Java中的容器详细总结(编辑中) 原文链接:http://anxpp.com/index.php/archives/656/ 注:本文基于 Jdk1.8 编写 通常程序总是根据运行时才知道的某些条件 ...

  3. java中的容器问题

    小小的总结一下java中的容器问题. 一.三个知识点 1.迭代器 1).java.util.Interator + hasnext(); next(); remove(); 2).java.lang. ...

  4. Java中arraylist和linkedlist源代码分析与性能比較

    Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...

  5. Java中的容器(集合)之ArrayList源码解析

    1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...

  6. Java中的容器(集合)之HashMap源码解析

    1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...

  7. [转] Java中的容器

    在书写程序的时候,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中. 由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都 ...

  8. java中Collection容器

    1.容器(Collection)也称为集合, 在java中就是指对象的集合. 容器里存放的都只能是对象. 实际上是存放对象的指针(头部地址): 这里对于八种基本数据类型,在集合中实际存的是对应的包装类 ...

  9. Java中String连接性能的分析【转】

    [转]http://www.blogjava.net/javagrass/archive/2010/01/24/310650.html 总结:如果String的数量小于4(不含4),使用String. ...

随机推荐

  1. js键盘按钮keyCode及示例大全

    以功能区分布 以 keycode 编号顺序分布 keycode 0 = keycode 1 = keycode 2 = keycode 3 = keycode 4 = keycode 5 = keyc ...

  2. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路:真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

  3. 使用wsHttpBinding构建Message安全模式和UserName授权

    http://www.cnblogs.com/artech/archive/2011/05/22/authentication_01.html https://www.cnblogs.com/Fran ...

  4. shell 关系运算符

    关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字. 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20: 运算符 说明 举例 -eq 检测两个数是否相等,相等返 ...

  5. shell模拟ctrl c停止

    kill命令可以带信号号码选项,也可以不带. 如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源. 也可以用kill向进程发送特定的信 ...

  6. Java编程语言下 Selenium 驱动各个浏览器代码

    这里采用的是Selenium3.7版本,首先介绍的是在Windows环境下运行的: 总结下注意事项: 1,设置各个浏览器的Driver路径 System.setProperty("" ...

  7. Python day21模块介绍4(logging模块,configparser模块)

    1.日志等级从上往下依次降低 logging.basicConfig(#日志报错打印的基础配置 level=logging.DEBUG, filename="logger.log" ...

  8. 《剑指offer》第二十二题(链表中倒数第k个结点)

    // 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...

  9. Try2Hack 过关技巧和密码

    官网:http://www.try2hack.nl/levels 玩到第五关实在是过不去了,因为那个程序太老了,win7根本就运行不了,崩溃. 转自:http://blog.csdn.net/chin ...

  10. inputsimulator - Windows Input Simulator

    窗体输入模拟器提供一个基于 win32 SendInput  方法的 模拟键盘鼠标输入的.net 接口.windows 输入模拟器可用于 WPF.windows 窗体和控制台应用程序, 实现模拟任意按 ...