0101-ioc
背景
ioc是spring的基础,即控制反转。springboot基于注解使用ioc.
ioc
spring称所有被管理的对象为bean,
spring ioc主要通过描述的方式完成3类bean的管理工作:
| 基本功能 | 说明 |
|---|---|
| 发布对象 | 包扫描业务bean,javaConfig或者xml的方式配置第三方bean |
| 获取对象 | BeanFactory或者ApplicationContext的子类获取bean |
| 依赖注入对象 | 通过关键字@Autowired,属性注入,构造函数注入,方法注入 |
spring ioc的核心接口是BeanFactory和ApplicationContext ;
| BeanFactory | ApplicationContext |
|---|---|
| 获取bean的方法 | 等同 |
| 判断是否是单例或者原型 | 等同 |
| 类型匹配 | 等同 |
| 获取bean的类型和别名 | 等同 |
| -- | MessageResource消息国际化功能 |
| -- | EnvironmentCapable环境可配置 |
| -- | ApplicationEventPublisher应用事件发布 |
| -- | ResourcePatternResolver资源模式解析 |
来个例子,发布和获取bean;
TODO
通过@ComponentSacn发布Bean
@ComponentScan源码阅读
| 主要方法 | 说明 |
|---|---|
| basePackages | 扫描的包路径 |
| basePackageClasses | 扫描的javaConfig类 |
| includeFilters | 包含的bean的过滤器 |
| excludeFilters | 排除的bean的过滤器 |
| lazyInit | 是否延迟初始化 |
javaConfig方式或者xml方式定义第三方Bean发布
javaConfig方式主要是增加@Configuration 和 @Bean注解来发布;
xml方式需要通过注解@ImportResource来引入
条件装配bean @Conditional(Condition实现类)
依赖注入
通过@Autowired来描述
通过@Primary和@Quelifier来消除歧义。
具体的依赖注入方式有 属性,构造函数,方法;
bean的生命周期
bean定义 -> bean初始化 ->bean生存期->bean销毁
bean定义:通过@ComponentScan扫描得到资源信息,从资源中解析出定义信息,然后把定义发布到spring容器中;
bean的初始化:创建bean,完成依赖注入,setBeanName,setBeanFactory,@PostConstruct标注的方法,postProcessorBeforeInitialzerion方法,setApplicationContext方法,afterPropertiesSet方法,postProcessorAfterInitialization方法;
bean生存期: 运行阶段直接使用
bean销毁: @PreDesctroy标注的方法,destory方法;
| 生命周期相关的扩展接口 | 说明 |
|---|---|
| BeanNameAware | 设置bean的名称 |
| BeanFactoryAware | 获取BeanFactory |
| ApplicationContextAware | 获取ApplicationContext |
| InitializingBean | 初始化bean |
| DisposableBean | 销毁bean |
| BeanPostProcessor | 所有ben的公共增强 |
属性文件
引入依赖:
spring-boot-configuration-processor;
然后使用@Value(“${xxx}”)来引用即可;
或者通过@ConfigurationProperties(“xxx”)直接组装到自定义类中;
还可以使用SpringEL来处理属性配置:
@Value("#{T(System).currentTimeMillis()}")
Bean作用域
| 作用域 | 说明 |
|---|---|
| singleton | 单例,全局唯一 |
| prototype | 原型,每次创建 |
| session | 每个http会话创建一个 |
| application | 同单例 |
| request | 每次请求创建一个 |
Profile
指明不同环境下启用的bean,springboot不同的profile对应不同的application-profile.yaml文件;
原创不易,转载请注明出处。
0101-ioc的更多相关文章
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- 深入理解DIP、IoC、DI以及IoC容器
摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...
- 自己实现简单Spring Ioc
IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
- DIP原则、IoC以及DI
一.DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象. 抽象不应该依赖于细节,细节应该依赖于抽象. 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为:"依赖于抽象&qu ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
- 【初探Spring】------Spring IOC(二):初始化过程---简介
首先我们先来看看如下一段代码 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultList ...
- 【初探Spring】------Spring IOC(一)
IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...
- .NET里简易实现IoC
.NET里简易实现IoC 前言 在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...
随机推荐
- 关于JDK+Tomcat+eclipse+MyEclipse的配置方法
说一下关于JDK+Tomcat +eclipse+MyEclipse的配置方法: 1.jdk的配置 我用的是jdk1.6版本,与jdk1.5方法相同.执行完安装程序后就要在进行一下配置,步骤如下:右键 ...
- ch8 固定宽度、流式、弹性布局
假设浏览器窗口设置为1250px:wrapper的宽度为960px:content的宽度为920px:确保了wrapper居中时两边有20px的间距: secondary的宽度为230px: pr ...
- spring mvc绑定参数之 类型转换 有三种方式:
spring mvc绑定参数之类型转换有三种方式: 1.实体类中加日期格式化注解(上次做项目使用的这种.简单,但有缺点,是一种局部的处理方式,只能在本实体类中使用.方法三是全局的.) @DateTim ...
- luogu P4014 分配问题
简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可 #include<bits/stdc++.h> using namespace std; #de ...
- 《编写高质量iOS与OS X代码的52个有效方法》书籍目录
一.熟悉Objective-C 1.了解Objective-C语言的起源 2.在类的头文件中尽量少引入其他头文件 3.多用字面量语法,少用与之等价的方法 4.多用类型常量,少用#define预处理指令 ...
- 【快学springboot】8.JPA乐观锁OptimisticLocking
介绍 当涉及到企业应用程序时,正确地管理对数据库的并发访问是至关重要的.为此,我们可以使用Java Persistence API提供的乐观锁定机制.它导致在同一时间对同一数据进行多次更新不会相互干扰 ...
- C. Maximum Median 二分
C. Maximum Median 题意: 给定一个数组,可每次可以选择一个数加1,共执行k次,问执行k次操作之后这个数组的中位数最大是多少? 题解:首先对n个数进行排序,我们只对大于中位数a[n/2 ...
- SSH Secure Shell 编码设置-----支持中文
参考:https://www.cnblogs.com/hupf/p/6920323.html #vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB1803 ...
- myBatis 操作 mysql时,使用 like 关键进行模糊查询的方法
参考:https://blog.csdn.net/rainbow702/article/details/50519424 like CONCAT('%', #{mkName}, '%')
- c++ char* 与LPCTSTR相互转化
] = "wo shi ni baba"; , , ch, -, NULL, ); wchar_t *wide = new wchar_t[num]; MultiByteToWid ...