当前位置: 首页 > news >正文

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进行扫描。

转载于:https://www.cnblogs.com/yangfei-beijing/p/6086763.html

相关文章:

  • C# 中的多线程(转载)
  • 20161122学习笔记
  • Linux systemd 打开调试终端、添加开机自运行程序
  • 设置python的默认编码为utf8
  • python 读写INI配置文件
  • Linux基础-linux命令:csplit
  • Ubuntu 16.04 - python3 安装mysql驱动
  • 设计模式——观察者模式:气象监测应用
  • C#学习基本概念之事件(四)---EventHandler委托(事件处理)
  • 微信小程序开发思路
  • Liunx Shell入门
  • c语言操作mysql数据库
  • Linux Linux程序练习十三(信号阻塞,捕获)
  • DNS2
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 0x05 Python数据分析,Anaconda八斩刀
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • EventListener原理
  • gcc介绍及安装
  • HTTP--网络协议分层,http历史(二)
  • JS笔记四:作用域、变量(函数)提升
  • laravel with 查询列表限制条数
  • Linux中的硬链接与软链接
  • Octave 入门
  • Promise面试题,控制异步流程
  • spark本地环境的搭建到运行第一个spark程序
  • spring boot 整合mybatis 无法输出sql的问题
  • SwizzleMethod 黑魔法
  • windows-nginx-https-本地配置
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 规范化安全开发 KOA 手脚架
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 说说动画卡顿的解决方案
  • 微信支付JSAPI,实测!终极方案
  • 协程
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Java总结 - String - 这篇请使劲喷我
  • 第二十章:异步和文件I/O.(二十三)
  • 湖北分布式智能数据采集方法有哪些?
  • !!java web学习笔记(一到五)
  • #13 yum、编译安装与sed命令的使用
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $GOPATH/go.mod exists but should not goland
  • (C)一些题4
  • (Git) gitignore基础使用
  • (LeetCode 49)Anagrams
  • (四)Android布局类型(线性布局LinearLayout)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .gitignore文件设置了忽略但不生效
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 依赖注入的基本用发
  • .NET Core引入性能分析引导优化
  • .NET4.0并行计算技术基础(1)