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

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的自有的功能。

 

源代码如附件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: