实现Aware接口使用Spring底层组件
Aware接口的实现类
基于@Component
,通过Aware的实现类在容器创建之前将Spring底层的信息获取并使用。
例如:
- 获取应用上下文对象applicationContext的
ApplicationContextAware
- 获取该类的bean对象信息的
BeanNameAware
- 获取该类类加载器classloader的
BeanClassLoaderAware
/**
* 通过Aware接口的实现类,获取到Spring底层相关组件
*/
@Getter
@Component
public class AwareComponent implements ApplicationContextAware, BeanNameAware {
/**
* 通过实现类的构造方法,获取到相应的Spring容器参数
*/
private ApplicationContext applicationContext;
private String thisBeanName;
/**
* 可以获得注册的Ioc容器的Context对象
*
* @param applicationContext 从ApplicationContextAware获取到的当前bean的名字
* @throws BeansException 获取bean异常
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 可以获取到当前Bean(AwareComponent)的名字
*
* @param name 从BeanNameAware中获取到的当前bean的名字
*/
@Override
public void setBeanName(String name) {
this.thisBeanName = name;
}
}
使用
AnnotationConfigApplicationContext configContext = new AnnotationConfigApplicationContext(BeanConfiguration.class);
// 测试Aware接口的实现类获取Spring的参数
AwareComponent awareComponent = configContext.getBean(AwareComponent.class);
System.out.println("This Context: " + configContext);
System.out.println("AwareComponent: " + awareComponent.getApplicationContext());