在spring中提供了很多关于Aware的接口,该接口拥有一个统一的规律,即在spring对实现了Aware相关接口bean的初始化时,同时会注入相关的资源。例如:实现了BeanFactoryAware接口的bean在初始化完成后,容器会自动注入BeanFactory实例;实现了ApplicationContextAware接口的bean在初始化后,也会同样注入ApplicationContext实例。
示例代码:
/**
* 实现Aware相关接口的bean
*/
public class AwareTest implements BeanFactoryAware {
private BeanFactory beanFactory;
/**
* spring通过set方法注入beanFactory实例
* @param beanFactory
* @throws BeansException
*/
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
/**
* 测试方法
*/
public void awareSay() {
Hello hello = (Hello) beanFactory.getBean("hello");
hello.say();
}
}
/**
* 测试实例
*/
public class Hello {
public void say() {
System.out.println("hello aware");
}
}
/**
* 运行测试
*/
public class Run {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-bean.xml");
AwareTest testAware = (AwareTest) applicationContext.getBean("test_aware");
testAware.awareSay();
}
}
配置文件
<bean id="test_aware" class="com.source.aware.AwareTest" />
<bean id="hello" class="com.source.aware.Hello" />
在实现Aware接口后,通过spring自动注入BeanFactory的实例就可以获取所有spring管理的bean,其他相关接口也有类似的规律。