Spring内置了用于不同目的的大量回调接口,很多场合都会使用到它们。使用这些回调接口往往能够达到事半功倍的效果。一旦目标受管Bean实现了回调接口,则当DI容器实例化受管Bean时,DI容器就会自动调用这些回调接口所定义的方法,进而将相关对象注入进来。最终,受管Bean便可使用它们了。
1. BeanClassLoaderAware回调接口
BeanClassLoaderAware回调接口可让受管Bean本身知道它是由哪一类装载器负责装载的。这一回调接口的定义如下。
public interface BeanClassLoaderAware {
void setBeanClassLoader(ClassLoader classLoader);
}
2. ApplicationContextAware 回调接口
类似于BeanFactoryAware回调接口,ApplicationContextAware使得受管Bean能够感知到IoC容器的存在, 它定义的回调方法如下。注意,ApplicationContextAware仅仅适合于ApplicationContext容器。
public interface ApplicationContextAware {
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}
3. MessageSourceAware回调接口
MessageSourceAware回调接口负责将MessageSource对象注入到当前受管Bean实例中,其定义如下。通过使用MessageSource对象,受管Bean能够获得国际化和本地化消息支持。
public interface MessageSourceAware {
void setMessageSource(MessageSource messageSource);
}
4. ApplicationEventPublisherAware回调接口
ApplicationEventPublisherAware回调接口负责将ApplicationEventPublisher对象注入到当前受管Bean实例中,以供分发事件使用,其定义如下。
public interface ApplicationEventPublisherAware {
void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher);
}
5. ResourceLoaderAware回调接口
ResourceLoaderAware回调接口负责将ResourceLoader对象注入到当前的受管Bean实例中,其定义如下。当受管Bean获得ResourceLoader对象后,它便能够通过它获得各种资源。
public interface ResourceLoaderAware {
void setResourceLoader(ResourceLoader resourceLoader);
}
6. BeanFactoryAware回调接口
如果当前受管Bean实现了BeanFactoryAware接口,则运行时它可以使用BeanFactory显式查找其依赖的对象。显然,这同Spring耦合在一起。BeanFactoryAware接口定义如下。
public interface BeanFactoryAware {
void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}
7. BeanNameAware回调接口
如果受管Bean实现了BeanNameAware回调接口,则受管Bean本身的id(name)会被BeanFactory注入到受管Bean中。BeanNameAware接口的定义如下。
public interface BeanNameAware {
void setBeanName(String name);
}