package org.springframework.beans.factory;
/**
* A marker superinterface indicating that a bean is eligible to be notified by the
* Spring container of a particular framework object through a callback-style method.
* The actual method signature is determined by individual subinterfaces but should
* typically consist of just one void-returning method that accepts a single argument.
*
* Note that merely implementing {@link Aware} provides no default functionality.
* Rather, processing must be done explicitly, for example in a
* {@link org.springframework.beans.factory.config.BeanPostProcessor}.
* Refer to {@link org.springframework.context.support.ApplicationContextAwareProcessor}
* for an example of processing specific {@code *Aware} interface callbacks.
*
* @author Chris Beams
* @author Juergen Hoeller
* @since 3.1
*/
public interface Aware {
}
Aware 的含义
察觉、注意到、知道的。
Aware 接口文档
一个标记父接口,指示了一个 Bean
有资格被 Spring
容器通过一个回调风格的方法通知一个特定的框架对象。实际的方法签名是由各个子接口确定的,但通常应该仅包含一个接受单个参数、返回值为 void
的方法。
请注意,仅仅实现 Aware
接口不会提供默认功能。相反,处理必须明确地进行,例如在一个 org.springframework.beans.factory.config.BeanPostProcessor
中,请参阅 org.springframework.context.support.ApplicationContextAwareProcessor
中有关处理具体的 Aware
接口回调的示例。
例子
参考文档中提到的 ApplicationContextAwareProcessor
,它实现了BeanPostProcessor
接口。
@Override
@Nullable
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (!(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueResolverAware ||
bean instanceof ResourceLoaderAware || bean instanceof ApplicationEventPublisherAware ||
bean instanceof MessageSourceAware || bean instanceof ApplicationContextAware)){
return bean;
}
AccessControlContext acc = null;
if (System.getSecurityManager() != null) {
acc = this.applicationContext.getBeanFactory().getAccessControlContext();
}
if (acc != null) {
AccessController.doPrivileged((PrivilegedAction
当它调用 postProcessBeforeInitialization
方法时,会调用 invokeAwareInterfaces
方法。如果 Bean
实现了 Aware
的一个子接口,那么就会调用对应子接口中的方法。调用方法时,可能会传入一个参数,就是文档中提到的框架对象,如 applicationContext
。