Spring特性——Aware感知特性
2015-07-08 18:25
375 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_17810/article/details/82637171
原创内容,转载请注明出处
Aware,即感知,是Spring IOC的一个特性,当实现了对应的Aware接口时,BeanFactory工厂会在生产bean时给bean注入对应的属性,即为该bean增强一定功能。
Aware类继承图如下
从上图可以看出Aware的所有子类接口,以下列出几个主要子类接口作用。
ApplicationContextAware:给实现该接口的bean注入ApplicationContext容器。
ApplicationEventPublisherAware:给实现该接口的bean注入ApplicationEventPublisher对象,以供分发事件使用。
BeanClassLoaderAware:给实现该接口的bean注入该类的类加载器。
BeanFactoryAware:给实现该接口的bean注入当前BeanFactory容器,此时该bean就持有BeanFactory容器功能。
BeanNameAware:给实现该接口的bean注入bean的名称。
现在新建一个ApplicationContextUtil类,实现了BeanNameAware和ApplicationContextAware接口,代码如下
package com.test.aware; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanNameAware; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class ApplicationUtil implements ApplicationContextAware,BeanNameAware { private ApplicationContext applicationContext; private String beanName; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public ApplicationContext getApplicationContext() { return applicationContext; } public void setBeanName(String name) { this.beanName=name; } public String getBeanName() { return beanName; } }
创建bean.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 测试Spring IOC Aware感知特性 --> <bean id="applicationUtil" class="com.test.aware.ApplicationUtil"/> </beans>
创建Junit测试代码
/** * 测试Aware感知特性 */ @Test public void testAware(){ ApplicationContext ctx = new FileSystemXmlApplicationContext("H:\\workspaceST\\cygoattest\\src\\test\\resources\\bean.xml"); ApplicationUtil util = (ApplicationUtil) ctx.getBean("applicationUtil",ApplicationUtil.class); System.out.println(util.getApplicationContext()); System.out.println(util.getBeanName()); }
测试结果如下
如上测试结果,最后ApplicationUtil实例被注入了ApplicationContext容器和它的名字。接下来ApplicationUtil可以操作成员变量ApplicationContext的自有的功能。
源代码如附件
相关文章推荐
- Spring Aware容器感知技术
- Spring实现Aware接口,完成对IOC容器的感知
- Spring Aware (Spring 感知)
- java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
- Spring4.0新特性--泛型依赖注入
- SPRING的事务传播特性学习整理标记
- 1、SpringBoot注解及特性介绍
- Spring事务的传播特性
- 在 Oracle JDBC 访问中加入一些 Spring 特性
- Spring 2.5新特性及架构图
- 视觉感知特性【3】基于视觉关注的图像显著性分析
- gdbx线程感知(OS Aware)调试使用说明
- Spring 管理事务(传播特性、隔离级别、readonly)
- 通过ApplicationContextAware加载Spring上下文环境
- 【Spring】事务的传播特性
- SpringBoot特性之Actuator
- 通过ApplicationContextAware加载Spring上下文环境
- org.springframework.context.ApplicationContextAware使用理解 .
- Spring2.0新特性几相关点评