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 ;

BeanFactoryApplicationContext
获取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文件;

原创不易,转载请注明出处,欢迎多沟通交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值