zoukankan      html  css  js  c++  java
  • SpringBoot揭秘:快速构建微服务体系

    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进行扫描。
  • 相关阅读:
    蠢货之对闭包表的扩展
    蠢货之TaskCompletionSource 带事件的同步调用
    SQLSERVER新建存储过程模板
    缓存更新
    写给”源码爱好者“
    区块链-一个不神秘却总能骗人的东西
    graceful-upgrades-in-go
    谁也逃不过C++
    Go的问题
    面试
  • 原文地址:https://www.cnblogs.com/yangfei-beijing/p/6086763.html
Copyright © 2011-2022 走看看