3.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。这些附加功能在第3.15节,“ApplicationContext的附加功能”

从Spring 2.5开始,autowiring是另一个替代方法来获取对ApplicationContext的引用。 “传统的”构造函数和byType的自动装配模式(如第3.4.5节“自动装配协作者”中所述)可以分别为构造函数参数或setter方法参数提供类型ApplicationContext的依赖。为了更灵活,包括自动连接字段和多个参数方法的能力,使用新的基于注解的自动装配功能。如果你这样做,ApplicationContext被自动装配到一个字段,构造函数参数或方法参数中,如果相关的字段,构造函数或方法带有@ Autowired注解,那么应该是ApplicationContext类型。有关详细信息,请参见第3.9.2节“@Autowired”

当一个ApplicationContext创建一个实现org.springframework.beans.factory.BeanNameAware接口的类时,该类将提供对其关联对象定义中定义的名称的引用。

public interface BeanNameAware {

    void setBeanName(String name) throws BeansException;

}

The callback is invoked after population of normal bean properties but before an initialization callback such as InitializingBean afterPropertiesSet or a custom init-method. 回调在普通bean属性的设置之后但在初始化回调之前被调用(本人注:其实这里我也有点懵,估计是在后面例如里的方法之前优先调用),例如InitializingBean afterPropertiesSet 或一个自定义init方法。

results matching ""

    No results matching ""