spring生命周期

本着好记性不如烂笔头的原则,准备将每天学的东西整理一下。
此章记录下springbean的生命周期。
spring会基于spring上下文(Application Content)和Factory创建 默认为单例的bean。
下图是spring-bean的生命周期图解。在这里插入图片描述
总的来说,spring-bean提供了两种创建方式,1是xml 2是注解

  1. xml创建主要依赖于ClassPathXmlApplicationContext类去创建。然后通过context.getBean(class)来获取bean实例对象。
  2. 而注解是依赖于AnnotationConfigApplicationContext类去创建,通过扫描路径,获取到类之后,判断类上是否有@Component、@config、@Service等注解,此处是用class原生的方法 Class.getAnnotatedInterfaces()判断的,然后调用BeanDefinitionParser提供的解析类去解析注解,Spring对配置类处理过程:org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions。其顶层接口是BeanDefinitionParser,BeanDefinitionParser中会有一个parse方法,返回解析好的BeanDefinition对象。在这里插入图片描述
    beanDefinition中存储着bean的所有配置信息,然后spring容器会根据beanDefinition去创建出具体的对象。
    bean的生命周期大致可以分为 实例化==> 属性赋值==> 初始化 ==> 最后被销毁。
    这边还是要看下refresh源码
    在这里插入图片描述

二.spring生命周期之NoUniqueBeanDefinitionException报错解决
1 . primary设置为true,默认是false
2. autowire-candidate 设置为false 这边默认为true
详解:当有多个类型一样的bean的时候 恰好这个时候你用的@Autowire(byType)去实现注入的时候,spring无法判断你要注入的是哪一个bean因此会抛出异常。这边可以给其中一个bean配置primary,这样当spring发现有众多bean的时候 会去找primary为true的bean作为注入类。或者将其他bean的autowire-candidate的属性设置为false。因为spring查找的时候 是根据autowire-candidate为true且类型相同 2个条件去判断所需要注入的bean对象的。这边可以看下BeanDefinitionParserDelegate类。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值