Spring的IOC、AOP

IOC(Inversion of Control):

spring容器控制了所有的bean,不用spring以前,一个bean要依赖另一个bean就在这个bean里初始化另一个bean才能使用另一个bean,是这个bean在控制另一个bean。现在spring容器控制所有的bean,并把另一个bean注入给这个bean。反转:是指控制bean的权利转移给容器了。

"不要给我们打电话,我们会打给你的(don‘t call us, we‘ll call you)"这是著名的好莱坞原则。

在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项目完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。

这和软件开发有一定的相似性, 演员们就像一个个Java Object, 最早的时候自己去创建自己所依赖的对象, 有了演艺公司(Spring容器)的介入,所有的依赖关系都是演艺公司搞定的, 于是控制就翻转了

应用控制反转后,当对象被创建时,由一个调控系统内的所有对象的外界实体将其所依赖的对象的引用传递给它。也就是说,依赖被注入到对象中。所以控制反转是关于一个对象如何获取它所依赖的对象的引用的,在这里,反转指的是责任的翻转

AOP(Aspect Oriented Programming):

在做系统设计的时候,一个非常重要的工作就是把一个大系统做分解,按业务功能分解成一个个低耦合、高内聚的模块,分解后会发现有些东西是通用的,或者是跨越多个模块的:

日志:对特定的操作输出日志来记录

安全:在执行操作之前进行的操作检查

性能:要统计每个方法的执行时间

事务:方法开始前要开始事务,结束后要提交或回滚事务

等等....

如果每次用到他们都编写一遍代码过于麻烦还有大量的代码冗余,aop就是用来解决这个问题的。

大体可以理解为:把某一项功能的代码封装起来,在用到它的地方直接切入。

Spring 的 bean:

bean就相当于定义一个组件,这个组件是用于具体实现某个功能的。这里的所定义的bean就相当于给了你一个简洁方便的方法来调用这个组件实现你要完成的功能。

Spring的容器:

Spring容器可以帮助你管理所有的Bean对象,bean都放在容器里

Beanfactory 和 ApplicationContext 都可以看成是容器的具体表现形式。就像不同样子的桶。用户需要什么样就用什么样的。

Beanfactory: 最基本的接口类  设定了最基本的功能规范。(最简单的桶,能装水,有把手)

Spring通过定义BeanDifinition 来管理基于Spring的应用中各种对象以及他们之间的相互依赖关系。BeanDifinition 抽象了我们对Bean的定义,是让容器起作用的主要数据类型。

Beanfactory 定义了IOC容器的最基本的形式,并且提供了IOC容器所应该遵守的最基本的服务契约,也是我们使用IOC容器所应遵守的最底层和最基本的编程规范。并没有给出容器的具体实现。

用户使用容器时,可以使用转义符“&”来得到FactoryBean本身,用来区分通过容器来获取FactoryBean产生的对象和获取FactoryBean本身。举例来说,如果myJndiObject是一个FactoryBean,那么使用&myJndiObject得到的是FactoryBean,而不是myJndiObject这个FactoryBean产生出来的对象。

区分FactoryBean和BeanFactory这两个在Spring中使用频率很高的类,它们在拼写上非常相似。一个是Factory,也就是IoC容器或对象工厂;一个是Bean。在Spring中,所有Bean都是由BeanFactory(也就是IoC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能产生或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。

最后给大家分享一个连接:

Spring 的本质系列(一):依赖注入

该连接来自于 码农翻身,码农翻身是一个非常赞的微信公众号。

一些关于Spring的随笔的更多相关文章

  1. Spring学习随笔(1):为什么要使用Spring

    寒冷的冬天,一周两节课,掏出买了一年没翻过的<Spring实战>. 刚刚接触spring的我对它还不是很熟悉,对各种知识的认知也比较浅薄,但我会学习的过程通过随笔记录下来,监督自己学下去. ...

  2. Spring JDBC 随笔

    Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...

  3. spring cloud 随笔记录(1)-

    最近随着微服务的火热,我也开始对我服务进行了解了  毕竟程序员这一行需要及时更新自己的技能,才能更好的生存. 我理解的微服务  项目由多个独立运行的程序组成,每个服务运行在自己的进程中,服务间采用轻量 ...

  4. Spring MVC随笔记录

    根据https://blog.csdn.net/abc997995674/article/details/80353410整理 @ModelAttribute 可以用在方法.方法参数上,也可以和@re ...

  5. spring mvc随笔

    一.SpringMvc学习笔记1.使用SpringMvc时需在web.xml文件中添加配置 <servlet> <servlet-name>springMVC</serv ...

  6. Spring学习随笔(2):Eclipse下Spring环境配置+入门项目

    1 准备工作 (按需下载) Eclipse 下载:http://www.eclipse.org/downloads/eclipse-packages/ : Spring 下载:http://repo. ...

  7. Spring:面向切片编程

    在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC ...

  8. 解决 Zuul 中 OAuth2 报 unauthorized 错误

    问题描述 微服务中使用 OAuth2 鉴权,直接访问正常,通过 Zuul 访问报错: { "error": "unauthorized", "erro ...

  9. 【Spring】Spring随笔索引

    Spring随笔索引 [Spring]Spring bean的实例化 [Spring]手写Spring MVC [Spring]Spring Data JPA

随机推荐

  1. ios常用到的第三方库

    在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...

  2. 如何反编译silverlight

     @years(945060991)  15:10:28问一下  如何反编译silverlight观,一世沧桑如画♥(752816388)  15:10:46解压就行@years(945060991) ...

  3. Python(2)(基本输入输出语句)

    我们先来说输出:

  4. I.MX6 不一定要设置BOOT_MODE进入烧录模式

    /************************************************************************* * I.MX6 不一定要设置BOOT_MODE进入 ...

  5. 「ZJOI2008」「LuoguP2590」树的统计(树链剖分

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  6. linux--安装phpcurl扩展

    在UBUNTU中直接用APT包管理工具安装: apt-get install curl libcurl3 libcurl3-dev php5-curl 安装好后重启Apache服务器就行了,如果还是不 ...

  7. 高并发服务器架构--SEDA架构分析

    纯粹转发,没有深入研究,转自:SEDA架构笔记 百牛信息技术bainiu.ltd整理发布于博客园  一.传统并发模型的缺点 基于线程的并发 特点:每任务一线程直线式的编程使用资源昂高,context切 ...

  8. bzoj3998

    后缀自动机+dp 想了挺长时间 后缀自动机的状态图是一个dag,从root走到一个点的路径数代表了这个状态包含的子串,我们先预处理出来每个节点向后走能够形成多少子串,注意这里不是直接在parent树上 ...

  9. Vue-i18n实现语言切换

    方法1 Vue — i18n 国际化 全局配置 安 装 1.直接引入js文件 <script src="https://unpkg.com/vue/dist/vue.js"& ...

  10. E20180413-hm

    skew adj. 斜的,歪的; [数学] 不对称的; [统计学] 歪斜,扭曲;   vt. 歪曲; 曲解; 使歪斜;   vi. 偏离,歪斜; 斜视; traversal  n. 横越,横断物,(横 ...