Spring Bean的生命周期

Spring Bean的生命周期
Spring Bean的生命周期图如上所示。具体内如如下:

  1. Spring容器从XML文件或@Configuration中bean的定义中实例化bean对象。
  2. Spring依据配置中指定的属性,为bean填充所有属性,此时是插入属性,但并没有对属性赋值。
  3. 如果bean实现BeanNameAware接口,spring调用setBeanName()方法,并传递bean的id。
  4. 如果bean实现BeanFactoryAware接口,spring将调用setBeanFactory()方法,并把自己作为参数。
  5. 如果bean实现ApplicationContextAware接口,spring将调用setApplicationContext()方法,并把ApplicationContext实例作为参数。
  6. 如果存在与bean关联的任何BeanPostProcessors(后处理器),则调用preProcessBeforeInitialization()方法。比如Autowired等依赖注入功能是在此时完成,此时已经对属性完成赋值,因此在此步骤之后的接口实现中,可以各个已经赋值的属性进行值的修改,或者利用属性传入其他方法中。
  7. 如果Bean实现了InitializingBean接口,则调用bean的afterPropertiesSet()方法。一般常在此调用bean对象内的属性值!看下面例子:
@Data   //get、set方法
@Slf4j  //记录日志
@ConfigurationProperties(prefix = "ly.jwt") //获取配置文件中的“ly.jwt”下的属性
@Component
public class JwtProperties implements InitializingBean {
    //这里会从yml配置文件中获得公钥和私钥的路径值,但由于每次使用公钥和私钥都需要从路径也就是硬盘上读取,效率过低,于是需要在本配置类中直接获取公钥和私钥对象
    private String pubKeyPath;
    private String priKeyPath;
    //定义公钥和私钥对象,然后考虑公钥和私钥的路径值是何时被赋值的,在此之后才可以取其值生成公钥和私钥对象
    private PrivateKey privateKey;
    private PublicKey publicKey;

    //根据Spring创建bean的生命周期,InitializingBean下的afterPropertiesSet方法是在依赖注入后执行,此时yml中的属性值已经注入到本配置文件的成员属性中,可直接获取其值
    @Override
    public void afterPropertiesSet() throws Exception {
        //此时pubKeyPath和priKeyPath均被附上路径值,可调用rsa工具类获取公钥和私钥
        try {
            privateKey = RsaUtils.getPrivateKey(priKeyPath);
            publicKey = RsaUtils.getPublicKey(pubKeyPath);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("【授权中心解析公钥和私钥失败】", e.getMessage());
        }
    }
}
  1. 如果为bean指定了init-method,那么将调用bean的init方法。
  2. 最后,如果存在与bean关联的任何BeanPostProcessors,则将调用postProcessAfterInitialization()方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring生命周期包括实例化、配置和销毁三个阶段。首先,实例化阶段是指创建一个Bean的实例。在Spring中,Bean的实例化可以通过使用BeanFactory或ApplicationContext来获取。其次,配置阶段是指对实例化的Bean进行配置,也就是进行IOC注入。在这个阶段,Spring会根据配置文件中的Bean的id值进行相应的配置。如果Bean实现了BeanNameAware接口,Spring还会调用它实现的setBeanName(String)方法,传递的参数就是Bean的id值。最后,销毁阶段是指当Bean不再使用时进行垃圾回收。对于Singleton模式的Bean,Spring会负责管理整个生命周期;而对于Prototype模式的Bean,Spring在创建好并交给使用者后就不再管理后续的生命周期。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [关于Spring Bean的生命周期](https://blog.csdn.net/Apeopl/article/details/82964799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Springbean生命周期详解](https://blog.csdn.net/qq_64169170/article/details/123052663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值