之前文章讲过,我们学习源码的很大原因是学习一些奇技淫巧。Aware就是其中之一。
spring中Aware是个接口,不要求实现任何方法,它的主要作用是做个标记。
Aware有很多子接口,主要的有以下几个:
BeanFactoryAware:setBeanFactory
ApplicationContextAware:setApplicationContext
EnvironmentAware:setEnvironment
BeanNameAware:setBeanName
简单来说,实现什么Aware就能获得对应的资源。
怎么做到的呢,spring通过后置处理器,判断bean实现了哪些aware接口,然后调用其set方法,将需要的资源,设置到属性中去。
所以如果想在业务类里获得容器,可以实现ApplicationContextAware接口;如果想获取bean工厂,可以实现BeanFactoryAware;如果想获得环境变量,可以实现EnvironmentAware;
抛开spring本身。这也给我们的开发提供了一些思路。接口不但可以规定行为是什么,还可以做为标识来用,甚至标识和行为配合来用。
实现这些接口的对象可以被识别出来,进行统一的设置或者预处理。
可以看作一种划分维度,当然从接口的本来功能理解,这些对象都有setxxx的行为,虽然setxxx是需要外界资源给予的,但仍然是其行为。
也可以理解不那么灵活的依赖注入。
网友评论