说说老生常谈的Spring

1.Spring框架是啥(先来一顿疯狂吐槽)

      说到Spring框架,想想几年前,以至于后来在网页上,只要搜索什么是spring,我想相信很多人看到最多的两个关键词语,然后又对这两个词语疯狂混淆,疯狂摸不清楚:空值反转,依赖注入。这里我不得不吐槽一下当时给这两个概念的命明者,特么起的真的叫一个好名字啊!每次去复习这个框架的时候,都要把者两个概念给搞清楚!而且有段时候,还疯狂混淆者两个概念,以为者两个是同一回事儿,以为他们就是控制反转=IOC=DI !!!当然有时候是自己智商问题,我现在甩锅给命名者是不是不太合适。后面去网络上去查这两个概念,发现很多说法也过于严谨,官方。其实我觉得是理解能力有限。下面说下我的理解:IOC是spring提供的对bean的管理的容器,控制反转和依赖注入其实是ioc的两个核心功能。控制反转其实就是框架ioc依照我的配置帮我们new对象;依赖注入就是根据我们的描述,给new出来的对象进行赋值。整个IOC就是提供了对我们描述对象的管理,以及对象之间关系的维护。IOC是spring的基础和内核,之后spring所有的扩展都围绕着IOC功能的!比如AOP,相信大家都知道spring AOP是基于动态代理实现的,所以他和普通的bean的区别就是,一个是框架之间调用发射生成实例,放入IOC容器,AOP是自己生成一个对原先类扩展的class类,然后在把这个对象new出来,最终放入IOC容器。所以,现在我来回答Spring是啥,Spring就是一个管理我们需要用到的对象的框架,它把对象封装成Bean,对象的所有的创建,毁灭,生命周期,统统不需要维护,让我们的代码专注于业务代码。

2.说说IOC

2.1 谈谈springIOC的beanFactory

        说到IOC,肯定离不开BeanFactory接口。如同它的名字,bean工厂,是用来管理bean的最核心的接口(命名叫BeanManager是不是更加合适点)。所有的bean的创建,获取,都在这个类里面执行。如果把我们Spring项目比作一辆汽车的话,BeanFactory相当于是整个汽车的发动机,是这个项目的心脏。它管理着整个spring项目的bean。BeanFactory最核心的方法就是getBean方法,这个方法就是这个BeanFactory的反应堆。IOC容器会调用getBean方法,来实现bean的控制反转依赖注入。如果阅读源码的同学,把这个方法的脉络清楚了,那么整个beanFactory的逻辑可以说已经掌握到精髓了。那BeanFactory具体是些啥呢,其实内部就是维护了一堆Map。Map里面维系了各种Class|beanName...等和bean的对应关系。我的getBean做了什么事情呢,就是检查这些Map中这个对象存不存在,如果存在,就取出,不存在则创建一个,并且给他的bean属性赋值,然后把新生成的bean对象返回。当然这只是一个简单的流程,中间还判断是不是单例,这个对象是不是一个工厂之类的比较复杂的判断。感兴趣的话,大家可以看看源码。

2.2 谈谈springIOC的ApplicationContext

      首先,我不知道把ApplicationContext叫做容器还合适不合适,姑且这边还把他比作IOC容器的吧。我们其实在接触Spring的时候,调用getBean方法其实是通过这个接口类来调用的。那么这个类和beanFactory有啥关系呢?其实在ApplicationContext实现类,是用了代理模式。ApplicationContext对beanFactory做了一下代理,也就是说,我们调用ApplicationContext的getBean,ApplicationContext最终还是调用beanFactory的getBean方法来获取bean。上面我把Spring项目比作一辆汽车,beanFactory比作马达,那么ApplicationContext就是车的底盘,所有的组件都要依据地盘安装。到底beanFactory和ApplicationContext的区别是啥呢!如果我们Spring的bean,要被加载到Spring容器里面,光光beanFactory,是不支持的!我认为,加载得分3大步!首先,得有组件定位我们的配置;其次,还要有加载配置的组件,最终加载后的数据注册到容器。BeanFactory只是其中的注册,前两步,就是applicationContext依据其他组件来执行。总之,ApplicationContext维系了整个Spring项目的生命周期,而beanFactory只是负责Bean,ApplicationContext负责全局

3.说说SpringAOP

      SpringAOP是Spring推出的一大基础功能,命名为面向切面;不得不说,命名太深奥,包括切面,切入点等概念。我再次吐槽,严谨官方命名会大大增加理解难度;所谓切入点,就是我们某些方法执行前,执行之后等某些特定的执行点。而切面,就是我们在执行前,或者执行后需要执行逻辑。而切面的实现靠的是代理模式,就是用增强类,对方法执行前,执行后,catch等点进行拦截,执行我的的切面逻辑。SpringAOP是基于动态代理,动态代理就是自己生成了一个类,这个类不是加载我们的class文件,而是根据我们的代码逻辑生成的类。上面也说了,实现方式,就是AOP的实例对象,在Spring容器里不再是我们写的类,而是字节码代理类的实例对象

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 2.1 我们的理念是:让别人为你服务 IoC是随着近年来轻量级容器(Lightweight Container)的...
    好好学习Sun阅读 2,713评论 0 11
  • IOC和DI是什么? Spring IOC 的理解,其初始化过程? BeanFactory 和 FactoryBe...
    justlpf阅读 3,474评论 1 21
  • 1.Spring整体架构 1)核心容器(Core Container) Core模块,主要包含了Spring框架基...
    Sponge1128阅读 1,062评论 0 1
  • 参考W3C Spring教程 Spring致力于J2EE应用的各种解决方案,而不仅仅专注于某一层解决方案。可以说S...
    王侦阅读 1,171评论 0 6
  • 常年的胃病又复发了,吃了药以后在家昏昏沉沉的躺了一天。今日,多云,偶有小雨,小的仿佛只是天空无意漏的几滴水。傍晚时...
    远逝之风yuki阅读 170评论 0 2