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"?>
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">
测试结果 四月 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接口的实现。