6.6.2 ApplicationContextAware 和 BeanNameAware
当 ApplicationContext 创建了一个实现 org.springframework.context.ApplicationContextAware 接口的对象实例时, 就为该实例提供了 ApplicationContext 引用.
- public interface ApplicationContextAware {
- void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
- }
因此, bean 可以通过 ApplicationContext 接口以编程方式操作创建它们的 ApplicationContext, 或者通过将引用强制转换为此接口的已知子类 (例如 ConfigurableApplicationContext) 来暴露额外的功能. 一种用途是对其他 bean 进行编程式检索. 有时这种能力很有用; 然而, 通常你应该避免使用它, 因为它将代码耦合到 Spring 并且不遵循协作者作为属性提供给 bean 这样的控制反转形式. ApplicationContext 的其他方法提供对文件资源的访问, 发布应用程序事件和访问 MessageSource. 这些附加功能在第 6.15 节 "ApplicationContext 的额外功能" 中介绍.
从 Spring 2.5 开始, 自动装配是另一种获取 ApplicationContext 引用的可选方法."传统" 的构造函数和 byType 自动装配模式 (如第 6.4.5 节 "自动装配协作者" 中所述) 可以分别为构造函数参数或 setter 方法参数提供 ApplicationContext 类型的依赖关系. 为了获得更大的灵活性, 包括使用新的基于注解的自动装配字段和多参数方法的能力. 如果您这样做, ApplicationContext 将自动装配带有 @Autowired 注解的字段, 构造函数参数或方法参数. 有关更多信息, 请参见第 6.9.2 节 "@Autowired".
当 ApplicationContext 创建实现 org.springframework.beans.factory.BeanNameAware 接口的类时, 该类提供了在其关联对象定义中定义的名称的引用.
- public interface BeanNameAware {
- void setBeanName(string name) throws BeansException;
- }
该回调函数在普通 bean 属性填充之后但在初始化回调之前调用, 例如 InitializingBean afterPropertiesSet 或自定义 init 方法.
来源: http://www.bubuko.com/infodetail-2947243.html