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

  • 相关阅读:
    数组
    习题
    JAVA 实战练习
    JAVA语言基础——类型转换
    JAVA 语言基础——运算符
    JAVA语法基础——数据类型
    09.22函数,三局两胜
    09.22 猜拳一次
    09.21,函数,累加求和
    09.21,枚举
  • 原文地址:https://www.cnblogs.com/silenceshining/p/12353305.html
Copyright © 2011-2022 走看看