Spring特性——Aware感知特性

 

原创内容,转载请注明出处

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

 

源代码如附件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值