Aware接口作用是能把Spring底层组件注入到ioc容器中
使用方法
自定义类实现xxxAware接口, 然后将这个类放入ioc容器中
@Component
public class AwareTest implements ApplicationContextAware, BeanNameAware, EmbeddedValueResolverAware {
// 这个Aware作用是拿到ioc容器
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("当前的ioc容器" + applicationContext);
}
// 这个Aware作用是拿到当前bean name
@Override
public void setBeanName(String name) {
System.out.println("当前bean的名字: " + name);
}
// 这个Aware作用是拿到字符串解析器
@Override
public void setEmbeddedValueResolver(StringValueResolver resolver) {
System.out.println(resolver.resolveStringValue("${os.name}"));
}
}
结果
当前bean的名字: awareTest
Mac OS X
当前的ioc容器org.springframework.context.annotation.AnnotationConfigApplicationContext@8e50104, started on Sun Sep 06 09:42:06 CST 2020
背后原理: 将这个实现了xxxAware接口的类放入到容器中, 会被xxxPostProcessor处理, 如果检测到了会调用里面的函数.