chapter 2:
饮水思源:回顾与探索Spring框架本质
IoC其实有两种方式,一种是DI(dependency Injection),一种是DL(dependency Lookup 依赖查找,前者是当前实体被动接受其依赖的其他组件被IoC容器注入,而后者则是当前实体主动去某个服务地查找其依赖的那些服务。
我们通常提到的Spring IoC,实际上是指Spring框架提供的IoC容器实现(IoC Container),而使用Spring IoC容器的一个经典代码片段就是从上下文类中获取bean,然后去使用bean。获取bean的过程实际上就是DL的工作,而构建任何一种IoC容器背后(BeanFactory,ApplicationContext)发生的事情,则更多是DI的过程。
Spirng IoC容器的依赖注入工作可以分为两个阶段:
阶段一:收集和注册
通过XML或者java代码的方式定义一些bean,然后通过手动组装或者让容器基于某些机制制动扫描的形式,将这些bean定义收集到IoC容器中。
阶段二:分析和组装
第一个阶段完成之后,我们可以暂且认为IoC容器中充斥着一个个独立的bean,他们之间没有任何关系。但实际上他们之间是有依赖关系的,所以,第二阶段,IoC容器就是分析这些已经在IoC容器之中的bean,根据他们之间的依赖关系先后组装他们。如果IoC容器发现一个bean依赖另一个bean,它就会将这个bean注入给依赖他的那个bean,知道所有bean的依赖都注入完成,所有的bean 都整装待发,整个IoC容器的工作即算完成。Spring最早通过xml配置文件的形式来描述bean与bean之间的关系,现在则基于代码和Annotation元信息的描述更为流行(比如@Autowired,@Inject)。
 
了解一点儿JavaConfig
1.表达形式层面
基于xml的配置方式是这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.1.xsd">
</beans>
而基于JavaConfig的配置方式是这样的:
@Configuration
public class MockConfiguration{
  //bean 定义
}
任何一个标注了@Configuration的java类定义都是一个JavaConfig配置类。
2.定义bean定义层面
基于xml的配置形式是这样的:
<bean id="mockService" class="..MockServiceImpl">
  ...
</bean>
而基于JavaConfig的配置形式是这样的:
@Configuration
public class MockConfiguration{
  @Bean
  public MockService mockService(){
    return new MockServiceImpl();
  }
}
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器中,方法名将默认为该bean定义的id。
3.表达依赖注入关系层面
为了表达bean与bian之间的依赖关系,在xml中一般是这样的:
<bean id="mockService" class="..MockServiceImpl">
  <property name="dependencyService" ref="dependencyService"/>

</bean>

<bean id="dependencyService" class="DependencyServiceImpl"/>
而在JavaConfig中是这样的:
@Configuration
public class MockConfiguration{
  @Bean
  public MockService mockService(){
    return new MockServiceImpl(dependcyService());
  }
  @Bean
  public DependcyService dependcyService(){
    return new DependcyServiceImpl();
  }
}
如果是一个bean的定义依赖其他的bean,则直接调用对应的JavaConfig类中依赖的bean的创建方法就可以。
3. 那些高曝光的Annotation
1>@Configuration
2>@ComponentScan
  配合声明式注解,将这些注解的bean定义类批量采集到Spring的IOC容器中,可以通过basePackage等属性来细粒度地订制@ComponentScan自动扫描的范围,如果不指定,则默认S僻壤框架时间会从声明@ComponentScan所在的package进行扫描。

SpringBoot揭秘:快速构建微服务体系的更多相关文章

  1. Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷

    JavaConfig项目: spring IOC有一个非常核心的概念——Bean.由Spring容器来负责对Bean的实例化,装配和管理.XML是用来描述Bean最为流行的配置方式.Spring可以从 ...

  2. 《SpringBoot揭秘 快速构建微服务体系》读后感(一)

    SpringIOC IOC有两种方式:一种是DI,另一种是DL,即Dependency Lookup(依赖查找).前者是当前软件实体被动接受其依赖的其他组件被IoC容器注入,而后者则是当前软件实体主动 ...

  3. 《SpringBoot揭秘 快速构建微服务体系》读后感(五)

    应用日志和spring-boot-starter-logging 快速web应用开发与spring-boot-starter-web 1.项目结构层面的约定

  4. 《SpringBoot揭秘 快速构建微服务体系》读后感(三)

    SpringApplication:SpringBoot程序启动的一站式解决方案 深入探索SpringApplication执行流程 因为书上的版本是1.2的,比较老,这里参考http://blog. ...

  5. 《SpringBoot揭秘 快速构建微服务体系》读后感(二)

    最简单的springBoot应用 package com.louis.test; import org.springframework.boot.SpringApplication; import o ...

  6. 《SpringBoot揭秘 快速构建微服务体系》读后感(四)

    再谈自动配置 基于条件的自动配置 调整自动配置的顺序

  7. [高清] SpringBoot揭秘快速构建微服务体系

    ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...

  8. SpringBoot 快速构建微服务体系 知识点总结

    可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...

  9. 通过GeneXus如何快速构建微服务架构

    概览 “微服务”是一个非常广泛的话题,在过去几年里,市面上存在着各种不同的定义. 虽然对这种架构方式没有一个非常精确的定义,但仍然有一些概念具有代表性. 微服务有着许多围绕业务能力.自动化部署.终端智 ...

随机推荐

  1. 让Lua自己把文件夹下面的所有文件自动加载起来吧

    没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...

  2. 【WCF】基于WCF的在线升级

    一.前言       前不久因公司产品需要完成了在线升级功能,因为编程技术不精,不敢冒然采用Socket方法实现在线升级,所以使用比较方便稳妥的WCF方式 如果考虑并发能力的话还是Socket> ...

  3. C#开发微信门户及应用(22)-微信小店的开发和使用

    在做企业电子商务方面,微信小店虽然较淘宝天猫等起步较晚,但是作为一个电商平台,这个影响力不容忽视,结合微信的特点和便利,微信小店具有很好的粘合性和广泛的用户基础,因此花费一定的时间,在这方面做深入的研 ...

  4. how to use panda

    0.Introduce pandas.read_csv(filepath_or_buffer,sep=', ', dialect=None, compression='infer', doublequ ...

  5. CentOS 6.7 如何启用中文输入法

    安装CentOS系统后,如何启用中文输入法呢?这个问题看起来简单,但对于Linux初学者来说,也可能不是一件容易的事.本文笔者和大家分享一下"CentOS 6.6 如何启用中文输入法&quo ...

  6. 记录一次bug解决过程:resultType和手动开启事务

    一.总结 二.BUG描述:MyBatis中resultType使用 MyBatis中的resultType类似于入参:parameterType.先看IDCM项目中的实际使用案例代码,如下: // L ...

  7. 异常:java.lang.LinkageError: loader constraint violation: when resolving interface method

    异常:java.lang.LinkageError: loader constraint violation: when resolving interface method "javax. ...

  8. IntelliJ IDEA使用(二):tomcat和jetty配置

    上一讲用idea创建了maven web项目,接下来我们把项目发布到tomcat和jetty运行,以便进一步地开发和调试 配置tomcat 第一.打开菜单栏 第二.点击设置按钮,添加应用服务器,选择t ...

  9. centos 域名硬解析(linux)

    centos做硬解析跟Windows一样修改一个文件. 具体文件为:/etc/hosts.修改命令: vi /etc/hosts 格式个Windows也一样的.

  10. ios UIWebView自定义Alert风格的弹框

    之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...