您的位置:首页 > 编程语言 > Java开发

Spring 4.2 感知接口

2015-08-07 11:34 603 查看
摘要: Spring 4.2 感知接口

1 ApplicationContextAware

当一个ApplicationContext创建一个实现org.springframework.context.ApplicationContextAware接口的实例时,为实例提供一个ApplicationContext引用。

public interface ApplicationContextAware {

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}

因此Beans能以编程方式操作创建它们的ApplicationContext,通过ApplicationContext接口或通过转换引用为该接口的已知子类,例如暴漏额外功能的ConfigurableApplicationContext。我们可以使用编程方式检索其它beans。有时这种能力是有用的;然而,通常你应该避免,因为它捆绑了Spring的代码并且不符合控制反转的风格。ApplicationContext提供访问文件资源、发布应用事件和访问MessageSource的其它方法。

从Spring 2.5开始,自动注入是获取ApplicationContext引用的另一种选择。“传统的”constructor和byType自动注入模式能为构造函数参数或setter方法参数提供ApplicationContext类型的依赖注入。更多灵活性,包括能够自动注入字段和多个参数方法,使用新的基于注解的自动注入特性。如果你这么做,ApplicationContext可以自动注入到字段、构造函数参数或方法参数。

2 BeanNameAware

当一个ApplicationContext创建类实现org.springframework.beans.factory.BeanNameAware接口,容器为类提供一个该类的bean名称。

public interface BeanNameAware {

void setBeanName(String name) throws BeansException;

}

在普通bean属性填充之后调用,但在初始化回调(InitializingBean的afterPropertiesSet方法或自定义的init-method方法)之前调用。

3 其它感知接口

除了ApplicationContextAware和BeanNameAware,Spring支持一系列Aware接口,允许beans告诉容器它们需要某一基础设施依赖。大多数重要的Aware接口总结如下——一般情况下,名称是依赖类型的很好的表示:

表 Aware接口

名称
依赖注入
ApplicationContextAware
声明ApplicationContext
ApplicationEventPublisherAware
封装ApplicationContext的事件发布者
BeanClassLoaderAware用于加载Bean类的类加载器
BeanFactoryAware声明BeanFactory
BeanNameAware声明Bean的名称
BootstrapContextAware容器中运行的资源适配器BootstrapContext。通常只在JCA感知ApplicationContext中有效
LoadTimeWeaverAware定义在加载时间处理类定义的weaver
MessageSourceAware解析消息的配置策略(提供参数化和国际化)
NotificationPublisherAwareSpring JMX通知发布者
PortletConfigAware当前容器运行的PortletConfig。只在web感知的Spring ApplicationContext中有效
PortletContextAware当前容器运行的PortletContext。只在web感知的Spring ApplicationContext中有效
ResourceLoaderAware底层访问资源的配置加载器
ServletConfigAware当前容器运行的ServletConfig。只在web感知的Spring ApplicationContext中有效
ServletContextAware当前容器运行的ServletContext。只在web感知的Spring ApplicationContext中有效
请再次注意,使用这些接口的代码会与Spring API捆绑,不符合控制反转风格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息