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方法。