spring-BeanNameAware的使用

Posted 一首简单的歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-BeanNameAware的使用相关的知识,希望对你有一定的参考价值。

首先看一个例子,例子内容延续上一篇ApplicationContextAware的使用:

package com.springinit;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringInit implements ApplicationContextAware, BeanNameAware {

    public static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("spring init");
        context = applicationContext;
    }

    @Override
    public void setBeanName(String name) {
        System.out.println("BeanNameAware:" + name);
    }

}

启动一个spring容器后的打印结果为:

BeanNameAware:springInit
spring init

由此可得出如下结论:

  1. spring容器启动在生产bean的时候会回调像ApplicationContextAware、BeanNameAware这些接口的方法;
  2. 执行顺序上,先执行BeanNameAware接口的setBeanName方法,再执行ApplicationContextAware接口的setApplicationContext方法,执行顺序的原理可查看ApplicationContextAware文章的ApplicationContext的生命周期图;
  3. 对于使用@Component注解纳入spring管理的bean,若未设置bean的name,则默认为首字母小写的bean类名,如SpringInit-springInit。

另外:除了上述两个Aware后缀的接口外,spring还提供了其他的生命周期的aware接口,比如:BeanFactoryAware、BeanClassLoaderAware等,在某些bean的业务逻辑中若需要用到spring容器的这些属性,可以采用实现Aware后缀的接口来获取,用的最多还是ApplicationContextAware来获取ApplicationContext。

以上是关于spring-BeanNameAware的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用Java代码和注解完成Spring配置

MATLAB 代码中使用的 C++ 代码

如何让hexo代码高亮?

好代码是管出来的——.Net中的代码规范工具及使用

如何使用短代码找到“页面ID”?

使用cocoapods管理私有库