Spring 5.2文档初读

黄春超
评审人:葛振宇、李文君

  • IOC容器概述:

    1. 容器是什么
      • 在Spring中,org.springframwork.context.ApplicationContext这一接口就代表了Spring IOC容器并且用于创建、配置、管理多个对象,并且还可以控制对象的生命周期,该接口常用的一种实现类就是ClassPathXmlApplicationContext,例如:ApplicationContext context = new ClassPathXmlApplicationContext("services.xml","daos.xml"),同时我们可以狭隘地认为一个context对象就对应于一个container。
    2. IOC是什么
      • IOC是控制反转(Inversion of Control)的简称,说它是一种技术,其实它更偏向于一种被动获取的思想。在我们传统的java中,构造任意一个对象都要通过new这个关键字,即当我们要使用到某个类时,我们先要去主动的创建,然后再来使用。而在Spring中,我们只需要通过各种注解或在配置文件中注册的方式就可以自动生成各种对象,这些对象就是存放在上述所说的容器中,当我们需要使用这些对象的时候,直接从容器中取出相应的对象即可,这种控制方式不仅使得我们更加方便的管理对象,而且还在一定程度上弱化了类和类之间的耦合。总而言之,控制反转就是一种将原本在程序中手动创建对象的控制权交给Spring框架管理的思想。
  • Bean概述:

    1. Bean是什么
      • Bean的本质就是一个对象,通常来说,所有的bean都是由使用者提供给容器的配置数据所创造的。在容器内部,这些bean都是一个个BeanDefinition对象,这些对象都包含下列元数据:

        • 全限定类名:通常代表该bean对象的实现类的包名加类名
        • 行为配置元素:表明该bean在容器中的行为(作用域,生命周期回调函数等)

        在基于XML的配置元数据中,我们可以使用id或者name者两个属性来指定一个bean对象的名称,并且我们必须保证在整个容器对象中,各个bean的id值都是唯一的。

  1. Bean的实例化
  • 构造器实例化:使用该方法创建一个bean对象时,相应的类中应该带有一个无参数的构造器,其他的属性通过setget方法来进行设置或者获取.除此之外,还需要在配置文件中设置bean元素的id和class属性以方便获取该bean对象。
  • 静态工厂方法实例化:使用该方法时必须先定义一个静态工厂类,在静态工厂类中定义一个静态方法用来返回某个实例化对象。具体代码如下:
  public class ClientService{
       private static ClientService service = new ClinetService();
       public ClientService(){}
        public ClientService createInstance(){return service;}
              }
<bean id="service" class="xxx.xxx.ClientService" factory-method="createInstance">
</bean>
  • 实例工厂方式实例化:使用该方法创建bean对象时,不需要通过静态工厂类提供的静态方法来创建实例,而是先在配置文件中创建一个bean元素作为工厂对象,需要实例化的bean也不是通过class属性指向其实例化的类,而是通过factory-bean指向工厂对象,然后通过使用factory-method属性来确定使用工厂对象中的哪个方法。具体配置如下:
<bean id=“serviceLocator” class="examples.DefaultServiceLocator">
</bean>
<bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance">
</bean>

上述三种配置都是最简洁的配置,除此之外,还可以根据实际情况设置bean对象是否为单例、是否需要别名等等。

  • DI概述:

    1. DI概念
      • DI是依赖注入(Dependecy Injection)的简称,上述已经提及到IOC是指将对象的创建权反转给Spring容器,这是一种相对宽泛的概念。而我个人感觉DI就是对这种过程进一步的扩展,DI是指在Spring创建对象的过程中,将对象依赖的一些属性(常量、对象)通过配置的方式设置给对象。同时,依赖注入让Spring所管理的bean以配置文件的方式组合在一起,而不是硬编码的方式耦合在一起,这是一种很好的解耦配置,使得代码更加偏向于理想中的高耦合,低内聚的特性。
    2. 注入方式
      • 基于有参构造函数的注入:将一些必要的属性放在构造函数中,使得bean在实例化时就可以得到相应的设置。使用这种方式注入属性是,要遵从下列两个要求:
        1.类中必须带有一个有参数构造器。
        2.在配置文件中相对应的bean的<constructor-arg>节点中设置name-value、type-value或者index-value这三种键值对方式中的一种来设置,这三种方式分别指通过属性名设置相应的值、通过属性类型设置相应的值、通过索引下标匹配设置相应的值。
      • 基于属性的set方法注入:属性注入要求相对应的bean对象必须要有一个无参数的构造器,并且对象中的每一个字段都具有相对应的set方法。在具体的执行过程中,Spring容器在xml配置文件通过反射的方式调用无参数构造器先创建出来一个对象,接着通过set方法将配置好的字段的值设置到该对象中去。
  • 阶段小结:

在Spring的IOC和DI中,我感觉真正在底层起到作用的应该是我们java中的反射机制。xml配置文件中都是一系列字符串,而通过权限定类名来创建实实在在的对象并且给对象初始化等等的一系列过程,就只有反射机制才能做到。同时,我个人感觉阅读文档和一些简单的源码是一种很好的提升能力的方式。

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

推荐阅读更多精彩内容