zoukankan      html  css  js  c++  java
  • 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文件;

    原创不易,转载请注明出处。

  • 相关阅读:
    Nginx +keepalived
    iptables
    编译安装HTTPD 2.4.9版本
    Apache+lvs高可用+keepalive(主从+双主模型)
    LVS-HA
    corosync+pacemaker实现高可用(HA)集群
    NTP
    私人定制自己的linux小系统
    大数据处理-bitmap是个神马东西
    CSS3制作苹果风格键盘
  • 原文地址:https://www.cnblogs.com/snidget/p/12146506.html
Copyright © 2011-2022 走看看