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
由此可得出如下结论:
- spring容器启动在生产bean的时候会回调像ApplicationContextAware、BeanNameAware这些接口的方法;
- 执行顺序上,先执行BeanNameAware接口的setBeanName方法,再执行ApplicationContextAware接口的setApplicationContext方法,执行顺序的原理可查看ApplicationContextAware文章的ApplicationContext的生命周期图;
- 对于使用@Component注解纳入spring管理的bean,若未设置bean的name,则默认为首字母小写的bean类名,如SpringInit-springInit。
另外:除了上述两个Aware后缀的接口外,spring还提供了其他的生命周期的aware接口,比如:BeanFactoryAware、BeanClassLoaderAware等,在某些bean的业务逻辑中若需要用到spring容器的这些属性,可以采用实现Aware后缀的接口来获取,用的最多还是ApplicationContextAware来获取ApplicationContext。
相关推荐
横云断岭 2020-06-11
横云断岭 2020-05-26
咻pur慢 2020-04-29
yupi0 2020-10-10
itjavashuai 2020-07-28
小鱿鱼 2020-03-09
shuiluobu 2020-03-03
MicroBoy 2020-02-29
neweastsun 2020-02-26
牧场SZShepherd 2020-02-23
csuzxm000 2020-01-10
csuzxm000 2020-01-05
haidaoxianzi 2020-01-01
whbing 2019-12-23
方志朋 2019-12-19