看源码过程中可以看到很多XXXAware,之前没去深究,直到看到有人面试阿里被问到这问题。才决定去了解一下。
(1)Aware是什么?
是一个接口,里面空白一片,没有任何方法,它是一个空荡荡的定义,一种标记。
(2)有什么用?
Aware的英文意思是“可感知”,它自身是一个空白的接口,但是它有很多实现类,所以它的功能其实就是可以让调用者获取到某些信息,例如:加载当前Bean的容器名,当前Bean在容器中的BeanName,获取一些文本信息和资源文件等等,去获取加载当前Bean的加载器信息,等等等等。
我们也可以自定义一些XXAware,去获取自己想要的信息。
(3)怎么用?
就按照上面说的,只要实现了Aware接口的,都是为了获取,感知某些信息。那么我们就假设需要获取当前Bean的name和class loader。看下怎么玩。
定义一个Service:
@Service
public class TestA implements BeanNameAware , BeanFactoryAware , BeanClassLoaderAware {
private String name;
private String factory;
private String classLoads;
@Override
public void setBeanName(String beanName){
name = beanName;
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
classLoads = classLoader.toString();
}
@Override
public void setBeanFactory(BeanFactory beanFactory