- 浏览: 312348 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhou363667565:
看到你的这个配置 有个地方有点问题:
< aop:po ...
spring ibatis 事务配置 -
wo17796452:
[b][/b][i][/i][u][/u]引用[*][img] ...
crowd Jira confluence 集成 -
wo17796452:
<input type="button&quo ...
crowd Jira confluence 集成 -
benbear2008:
这些类图呢?
Spring MVC框架类图与顺序图 -
TTLtry:
谢了 最近学习spring时候 却总是登不上官方网站 很多 ...
Spring 2.5.5 api 帮助文档 chm格式 下载
Spring中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实作BeanFactoryAware的Bean在初始后,Spring容器将会注入BeanFactory的实例,而实作ApplicationContextAware的Bean,在Bean被初始后,将会被注入 ApplicationContext的实例等等。 ApplicationContextAware.java public interface ApplicationContextAware { void setApplicationContext(ApplicationContext context); } HelloBean.java package onlyfun.caterpillar; import org.springframework.context.*; public class HelloBean implements ApplicationContextAware { private ApplicationContext applicationContext; private String helloWord = "Hello!World!"; public void setApplicationContext(ApplicationContext context) { this.applicationContext = context; } public void setHelloWord(String helloWord) { this.helloWord = helloWord; } public String getHelloWord() { applicationContext.publishEvent( new PropertyGettedEvent("[" + helloWord + "] is getted")); return helloWord; } } PropertyGettedEvent.java package onlyfun.caterpillar; import org.springframework.context.*; public class PropertyGettedEvent extends ApplicationEvent { public PropertyGettedEvent(Object source) { super(source); } } PrppertyGettedListener.java package onlyfun.caterpillar; import org.springframework.context.*; public class PropertyGettedListener implements ApplicationListener { public void onApplicationEvent(ApplicationEvent event) { System.out.println(event.getSource().toString()); } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="propertyGetterListener" class="onlyfun.caterpillar.PropertyGettedListener"/> <bean id="helloBean" class="onlyfun.caterpillar.HelloBean"> <property name="helloWord"><value>Hello!Justin!</value></property> </bean> </beans> Test.java package onlyfun.caterpillar; import org.springframework.context.*; import org.springframework.context.support.*; public class Test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); HelloBean hello = (HelloBean) context.getBean("helloBean"); System.out.println(hello.getHelloWord()); } } log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.xml.XmlBeanDefinitionReader). log4j:WARN Please initialize the log4j system properly. org.springframework.context.support.ClassPathXmlApplicationContext: displayName=[org.springframework.context.support.ClassPathXmlApplicationContext; hashCode=33219526]; startup date=[Fri Oct 29 10:56:35 CST 2004]; root of ApplicationContext hierarchy [Hello!Justin!] is getted Hello!Justin! ResourceLoaderAware.java public interface ResourceLoaderAware { void setResourceLoader(ResourceLoader loader); } HelloBean.java package onlyfun.caterpillar; import org.springframework.context.*; public class HelloBean { private ApplicationContext applicationContext; private String helloWord = "Hello!World!"; public void setApplicationContext(ApplicationContext context) { this.applicationContext = context; } public void setHelloWord(String helloWord) { this.helloWord = helloWord; } public String getHelloWord() { applicationContext.publishEvent(new PropertyGettedEvent("[" + helloWord + "] is getted")); return helloWord; } } ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); HelloBean hello = (HelloBean) context.getBean("helloBean"); hello.setApplicationContext(context); System.out.println(hello.getHelloWord());
Bean取得BeanFactory、ApplicationContextAware的实例目的是什么,一般的目的就是要取得一些档案资源的存取、相 关讯息资源或是那些被注入的实例所提供的机制,例如ApplicationContextAware提供了publishEvent()方法,可以支持基于Observer模式的事件传播机制。
ApplicationContextAware接口的定义如下:
我们这边示范如何透过实作ApplicationContextAware注入ApplicationContext来实现事件传播,首先我们的HelloBean如下:
ApplicationContext会由Spring容器注入,publishEvent()方法需要一个继承ApplicationEvent的对象,我们的PropertyGettedEvent继承了ApplicationEvent,如下:
当ApplicationContext执行publishEvent()后,会自动寻找实作ApplicationListener接口的对象并通知其发生对应事件,我们实作了PropertyGettedListener如下:
Listener必须被实例化,这我们可以在Bean定义档中加以定义:
我们写一个测试程序来测测事件传播的运行:
执行结果会如下所示:
以上是以实作事件传播来看看实作Aware接口取得对应对象后,可以进行的动作,同样的,您也可以实作ResourceLoaderAware接口:
实作ResourceLoader的Bean就可以取得ResourceLoader的实例,如此就可以使用它的getResource()方法,这对于必须存取档案资源的Bean相当有用。
基本上,Spring虽然提供了这些Aware相关接口,然而Bean上若实现了这些界面,就算是与Spring发生了依赖,从另一个角度来看,虽然您可以直接在Bean上实现这些接口,但您也可以透过setter来完成依赖注入,例如:
注意这次我们并没有实作ApplicationContextAware,我们在程序中可以自行注入ApplicationContext实例:
就Bean而言,降低了对Spring的依赖,可以比较容易从现有的框架中脱离。
发表评论
-
入门 21 - Controller的单元测试
2011-03-14 08:09 1134现在假设您要设 ... -
Spring MVC框架类图与顺序图
2011-03-14 08:08 4986藉由了解Spring的框架组成,我们可以了解框架之中的类与 ... -
Spring入门19 - ModelAndView类别
2011-03-14 08:07 1356入门 19 - ModelAndView类别 ... -
DispatcherServlet定义档
2011-03-14 08:07 887DispatcherServlet预设使用servlet名 ... -
入门 17 - 第一个Spring MVC Web程序
2011-03-14 08:06 1121进行这个程序之前,请您先完成入门 04 - 第一个Spri ... -
入门 16 - BeanFactoryPostProcessor接口
2011-03-14 08:05 1017撰写Bean定义档通常使用XML来撰写,XML阶层式的组织 ... -
入门 14 - 资源文件的取得
2011-03-14 08:04 886首先来看看ApplicationContext接口的实作 ... -
入门 13 - MessageResource接口
2011-03-14 08:03 1131ApplicationContext继承了org.spri ... -
入门 12 - ApplicationContext接口
2011-03-14 08:03 919在Spring中,BeanFactory提供的是个比较API层 ... -
入门 11 - DataSource注入
2011-03-14 08:02 1075对于不同的数据库存取需求,我们使用JDBC来解决这个 ... -
入门 10 - 集合对象注入
2011-03-14 08:01 826对于像数组、java.util.List、java. ... -
入门 09 - 属性参考与自动绑定
2011-03-14 08:00 874在定义Bean时,除了直接指定值给属性值之外,还可以直接参 ... -
入门 08 - 不使用XML定义档
2011-03-14 07:59 857XML档案的阶层格式非常适用于于组态设定,也因此几 ... -
入门 07 - Bean生命周期
2011-03-14 07:59 800在Spring中,从BeanFactory取得的实 ... -
入门 06 - Bean定义档进阶读取
2011-03-14 07:58 878BeanFactory可以接受InputStrea ... -
Constructor注入
2011-03-14 07:57 1055Spring鼓励的是setter injection,但也 ... -
第一个Spring程序
2011-03-14 07:57 882首先我们要先取得Sprin ... -
入门 03 - 依赖注入DI
2011-03-14 07:56 870IoC模式基本上是一个高层的概念,在Martin Fow ... -
控制反转IoC
2011-03-14 07:55 843IoC全名Inversion of Control,如果 ... -
简介 Spring
2011-03-14 07:54 788入门 01 - 简介 Spring Spring是轻量 ...
相关推荐
通过aware接口,可以对spring相应资源(可能包含相关核心资源)进行操作(一定要慎重) 首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递...
- **定义**:Aware接口是一组接口的总称,用于让bean能够意识到Spring容器的存在。 - **作用**:允许bean获取到自身的一些元数据(如ApplicationContext、BeanName等)。 - **示例**:实现`ApplicationContextAware`...
- 其他Aware接口允许bean获取更多的上下文信息。 - **3.7 Spring Bean的继承** - 如何在一个bean上继承另一个bean的配置。 - **3.8 容器扩展点** - **3.8.1 使用BeanPostProcessor定制bean** - ...
- **Resource Loader Aware 接口**:允许 Bean 获取其上下文中的 ResourceLoader 实例。 **3. 验证、数据绑定和类型转换** - **验证**:使用 Validator 接口进行验证。 - **数据绑定**:将请求参数或数据模型...
- **使用*Aware接口**:Spring支持的*Aware接口允许Bean获得Spring容器的一些信息。 - **Bean可见性**:控制Bean是否可以在其他配置类中访问。 - **Bean作用域**:通过@Bean注解指定Bean的作用域。 - **Bean命名...
Hello World是编程入门的经典示例,Dart也不例外。一个基本的Dart程序通过定义一个main函数来运行。在Dart中,可以使用传统的函数体,也可以使用箭头函数语法来简化代码。 值和变量是编程的基本概念。在Dart中,值...
3. **能源效率**(Energy-aware resource allocation heuristics.pdf) - 在数据中心,能源消耗是主要成本之一。因此,能源效率成为云计算研究的焦点。 - 资源分配策略的目标是减少能源消耗,同时保证服务质量。这...
- **Type1接口注入**:通过实现特定的接口(如Aware接口),容器会在实例化对象时调用相应的setter方法来注入依赖。 - **Type2设值注入**:这是最常见的依赖注入方式,通过setter方法注入依赖。 - **Type3构造子注入...
- **The Resource Loader Aware interface**:介绍了Resource Loader Aware接口及其使用。 - **Resources as dependencies**:讲解了如何将资源作为依赖项使用。 - **Application contexts and Resource paths**:...
标题中的“sx1262_cad STM32.rar”表明这是一个关于使用STM32微控制器与SX1262无线通信芯片进行CAD(Carrier-Aware Detection,载波感知)配置的项目压缩包。这个资源可能包含源代码、库文件和其他相关文档,旨在...
Spring提供了一系列的Aware接口,如BeanNameAware、ApplicationContextAware等,用于让Bean感知到Spring容器的一些信息。 #### 十六、BeanFactoryPostProcessor接口 BeanFactoryPostProcessor接口允许开发者在...
7.1. Zend_Controller 快速入门 7.1.1. 简介 7.1.2. 入门 7.1.2.1. 文件系统的组织结构 7.1.2.2. 设置文件根目录 7.1.2.3. 创建URL重写规则 7.1.2.4. 创建你的bootstrap文件 7.1.2.5. 创建默认的控制器...
5. **情感分析**:NLTK提供了VADER(Valence Aware Dictionary and sEntiment Reasoner)工具,用于对社交媒体文本进行情感分析,判断其正面、负面或中性的情感倾向。 6. **语料库**:NLTK附带了许多预处理的语料库...