Java中的容器和注入分析
为什么会出现容器的注入?
容器:顾名思义,装东西的器物。
至于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中的容器和注入分析的更多相关文章
- Java EE中的容器和注入分析,历史与未来
Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...
- (转)Java中的容器详细总结
Java中的容器详细总结(编辑中) 原文链接:http://anxpp.com/index.php/archives/656/ 注:本文基于 Jdk1.8 编写 通常程序总是根据运行时才知道的某些条件 ...
- java中的容器问题
小小的总结一下java中的容器问题. 一.三个知识点 1.迭代器 1).java.util.Interator + hasnext(); next(); remove(); 2).java.lang. ...
- Java中arraylist和linkedlist源代码分析与性能比較
Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...
- Java中的容器(集合)之ArrayList源码解析
1.ArrayList源码解析 源码解析: 如下源码来自JDK8(如需查看ArrayList扩容源码解析请跳转至<Java中的容器(集合)>第十条):. package java.util ...
- Java中的容器(集合)之HashMap源码解析
1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...
- [转] Java中的容器
在书写程序的时候,我们常常需要对大量的对象引用进行管理.为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中. 由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都 ...
- java中Collection容器
1.容器(Collection)也称为集合, 在java中就是指对象的集合. 容器里存放的都只能是对象. 实际上是存放对象的指针(头部地址): 这里对于八种基本数据类型,在集合中实际存的是对应的包装类 ...
- Java中String连接性能的分析【转】
[转]http://www.blogjava.net/javagrass/archive/2010/01/24/310650.html 总结:如果String的数量小于4(不含4),使用String. ...
随机推荐
- vue-echarts的使用及编译报错解决方法
一. 使用 vue-cli 快速构建vue项目, 引入vue-echarts组件 安装: > npm i vue-echarts --save 修改 webpack.config.js 配置: ...
- python 斐波那契查找
def fibonacci_search(lis, key): # F = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 ...
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...
- 使用R内置函数操作数据框
我们已经学习了数据框的基础,这里回顾一下用于筛选数据框的内置函数.尽管数据框本质上是一个由向量构成的列表,由于各列长度相同,所以可以将其看作矩阵进行访问和操作.选择满足特定条件的行,需要为 [ ] 的 ...
- 《剑指offer》第三十二题(不分行从上往下打印二叉树)
// 面试题32(一):不分行从上往下打印二叉树 // 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. #include <iostream> #include ...
- js 中面向对象的多态
什么是多态: 实际上是不同对象作用与同一操作产生不同的效果.多态的思想实际上是把“想做什么”和“谁去做“分开,多态的好处是什么呢?为什么要多态?我们来看看 Martin Fowler 在<重构: ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- 新概念 Lesson 2 Sorry, sir.
Is this your handbag? 这是你的手提包吗? Yes,it is. /No it isn't 人称代词的主格宾格 形容性物主代词的用法 Does the man get his um ...
- (GoRails) Form对象设计风格: 用自建的Model来对参数进行操作。
视频:https://gorails.com/episodes/form-objects-design-pattern?autoplay=1 git代码 :https://github.com/gor ...
- 4-2 Ajax练习题,12结算!Check Out。
练习题:在购物车的每个商品旁添加按钮,按一下减一个,数量为0删除该商品.先用普通方法再用Ajax支持. 1.自定义方法decrease, 为其设定路径routes.rb. 在resouurces :l ...