ioc容器里面的对象分两种,一种是用户自定义对象,一种是容器对象
Aware 接口可以理解为用来获取某些容器对象的方法
获取容器对象肯定是为了想利用容器对象的能力/服务
通过实现某种类型的Aware 来将自定义对象与容器"攀上亲"
例如一个普通的Bean对象,需要用到BeanFactory,可以这样做
@Component
public class MyAware implements BeanFactoryAware {
BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
实现BeanFactoryAware,重写setBeanFactory方法即可
Spring是怎么做到的呢?
其实是在初始化自定义类的时候,会调动ApplicationContextAwareProcessor类中的postProcessBeforeInitialization方法
@Override
@Nullable
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (!(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueResolverAware ||
bean instanceof ResourceLoaderAware || bean inst

这篇博客介绍了Spring IOC容器中用户自定义对象与容器对象的交互方式,主要通过Aware接口实现。当一个Bean对象需要使用到BeanFactory或其他容器对象的能力时,可以实现对应的Aware接口,如BeanFactoryAware。Spring在初始化Bean时,会检查并调用对应的set方法,将容器对象注入到自定义对象中,从而让自定义对象能够利用容器的服务。
1512

被折叠的 条评论
为什么被折叠?



