Spring中的Aware

Aware接口

  • Spring中提供了一些以Aware结尾的接口,实现Aware接口的Bean在被初始化之后,可以获取相应资源
  • 通过Aware接口,可以对Spring相应资源进行操作
  • 为对Spring进行简单的扩展提供了方便的入口

例如ApplicationContextAware接口,BeanNameAware接口。 

以下对ApplicationContextAware接口,BeanNameAware接口进行简要的分析;

ApplicationContextAware接口用于在Bean中获取ApplicationContext实例。

BeanNameAware接口用于在Bean中获取当前Bean注册到IoC容器中的id名称。

测试前准备工作082858_XcBY_3436951.png

说明ABCApplicationContext.java 实现ApplicationContextAware接口的类

      ABCBeanName.java 实现BeanNameAware接口的类

      AwareTest.java 单元测试类

      Spring-aware.xml SpringBean配置文件

  1. ABCBeanName.java
    package com.abc;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class ABCApplicationContext implements ApplicationContextAware {
    
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    		// TODO Auto-generated method stub
    		ABCApplicationContext context = (ABCApplicationContext)applicationContext.getBean("applicationContextAware");
    		System.out.println("ABCApplicationContext " + context.getClass().getName());
    	}
    
    }
    

    ABCBeanName.java

    package com.abc;
    
    import org.springframework.beans.factory.BeanNameAware;
    
    public class ABCBeanName implements BeanNameAware {
    
    	@Override
    	public void setBeanName(String name) {
    		// TODO Auto-generated method stub
    		System.out.println("ABCBeanName " + name);
    	}
    
    }
    

    AwareTest.java

    package com.abc;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.BlockJUnit4ClassRunner;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    @RunWith(BlockJUnit4ClassRunner.class)
    public class AwareTest {
    	private ClassPathXmlApplicationContext context = null;
    	@Before
    	public void init(){
    		context = new ClassPathXmlApplicationContext("classpath:Spring-aware.xml");
    	}
    	@After
    	public void destroy(){
    		context.destroy();
    	}
    	@Test
    	public void test(){
    		
    	}
    	
    }
    

    Spring-aware.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    	<bean id="applicationContextAware" class="com.abc.ABCApplicationContext"></bean>
    	<bean id="beanNameAware" class="com.abc.ABCBeanName"></bean>
    </beans>
    

    测试结果

    四月 25, 2017 8:22:24 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@182decdb: startup date [Tue Apr 25 08:22:24 HKT 2017]; root of context hierarchy
    四月 25, 2017 8:22:24 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [Spring-aware.xml]
    ABCApplicationContext com.pioneer.other.ABCApplicationContext
    ABCBeanName beanNameAware
    四月 25, 2017 8:22:25 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@182decdb: startup date [Tue Apr 25 08:22:24 HKT 2017]; root of context hierarchy
    

    结论:ApplicationContextAware接口,BeanNameAware接口 可以认为是获取相应Spring容器资源的回调方法,可以方便的获取到相应的资源。一个Bean同时实现ApplicationContextAware接口,BeanNameAware接口,IoC容器的调用顺序是BeanNameAware接口的实现,然后是ApplicationContextAware接口的实现。

转载于:https://my.oschina.net/pioneerDev/blog/886471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值