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 的本质系列(一):依赖注入

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

转载于:https://www.cnblogs.com/CZDblog/p/5564933.html

一些关于Spring的随笔相关推荐

  1. spring.aop 随笔4 如何借助jdk代理类实现aop

    0. 下了有一个月的雨,这对鼻炎来说来吗?不好 其实这也算6月份的博客,之前一直疏于整理 本文仅关注jdk代理所实现的spring.aop下,两者的关系 完整的aop源码走读请移步相关 spring. ...

  2. Spring Cloud 随笔:记录在使用 OAuth2 遇到的巨坑

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文转载文章,原文链接 https://www.shangyang.me/2017/06/01/s ...

  3. 一次生产 CPU 100% 排查优化实践

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文转载于公众号 crossoverJie 前言 到了年底果然都不太平,最近又收到了运维报警:表示 ...

  4. MyBitis(iBitis)系列随笔之六:mybitis与spring集成

    目前Spring官方还没有出整合Mybatis的特性,但是mybitis比较给力,开发了一个mybatis-spring插件,达到与Spring的完美整合目的. 在与Spring集成前,一方面我们需要 ...

  5. Spring Web MVC 随笔

    1.ContextLoaderListener 对于使用Spring的Web应用,无需手动创建Spring容器,而是通过配置文件声明式地创建Spring容器.可以直接在web.xml文件中配置创建Sp ...

  6. Spring 框架核心概念IoC 随笔

    IoC = DI(Dependency Injection ) + 生命周期钩子事件 + 外部配置 ... IoC核心设计模式 Factory 模式和 Observer 模式,强制使用 依赖注入 模式 ...

  7. spring随笔(三)DataBase

    1,Data access with JDBC 使用springJdbc非常简单.在我们写daoImpl的时候只需要继承spring的org.springframework.jdbc.core.sup ...

  8. spring随笔(二) AOP

    AOP(Aspect-Oriented Programming 面向切面编程) aop(Aspect-Oriented Programming)也就是面向切面编程,作为面向对象编程的一种补充.aop从 ...

  9. spring 随笔(一) bean Dependency Injection

    1,一切都是Bean Bean是Spring应用程序中(其实是Spring容器中)的基本元素,在Spring框架上运行的应用程序,就是由一个又一个的Bean组合在一起.像搭积木一样堆出来的.所有的Be ...

最新文章

  1. idea修改java和jsp不起作用_使用IDEA编写jsp时EL表达式不起作用的问题及解决方法...
  2. [Jobdu] 题目1214:丑数
  3. 【lua学习】2.数据类型
  4. 图解 Elasticsearch 写入流程
  5. 苹果绕id工具_绕ID教程(iOS13.313.3.1)
  6. 阿里云ECS远程桌面连接失败
  7. 修真院教学模式三大阶段之任务体系
  8. 【Ubuntu】硬盘读写速度测试
  9. HTML图片不能上下铺满屏幕_多张图片的PPT,如何排版的更有创意?
  10. C. Product of Three Numbers
  11. Github 上火热的十个 Python 项目,从Debug工具到AI水军、量化交易系统。
  12. Xcode使用OpenCV访问Mac摄像头权限问题
  13. 今日头条有意向收购锤子科技;原金立总裁加入小米;苹果应用商店出现查开房记录app|雷锋早报...
  14. 总有人问 IT 行业有发展前景吗?那就用我的经历来告诉你
  15. 基于ssm的校园二手物品交换系统
  16. MacbookPro 2019 安装tensorflow GPU加速版
  17. Python爬虫实战,pymongo模块,Python实现数据分析国外人为啥喜欢李子柒
  18. 遇到移动号码手机停机怎么办?如何自助解决上网问题?
  19. VC6.0實踐——sketchpad
  20. 带pee-phlone的LSTM源码的阅读笔记

热门文章

  1. Json.Net Demo2
  2. spring-注解实现入门
  3. Linux基本管理篇
  4. flex 学习笔记 皮肤(一)
  5. 云计算:技术疲劳玩概念 伪云项目横行于世
  6. 科发财务凭证登陆出现错误:40002
  7. spring高级之AOP详解
  8. 雪花怎么画_平安夜怎么过?画个圣诞妆,你是最迷人嘎,你知道吗
  9. 对于DSH算法损失函数的理解
  10. linux首次安装mysql密码是多少,Linux小白,初次安装MySQL,大神请绕路