一.概述
Aware在java之中一个比较合理的翻译是注入.
看到注入,我们就明白了,现在我们做的就是将容器注入到Bean之中.
另外在spring之中,有各种Aware接口,其功能和使用方式几乎一致.
二 为和需要注入容器
我们在spring整合这种组件的时候,通常组件之内都需要获取容器的状态,这个时候就需要获取容器的引用.
三.ApplicationContextAware接口
下面看一个例子:
public class BeanAware implements ApplicationContextAware {
private ApplicationContext context = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("spring 自动帮我们注入IOC容器的引用");
this.context = applicationContext;
}
public ApplicationContext getIOC() {
return context;
}
}
配置:
<bean id="user" class="com.trek.ioc.bean.User"></bean>
<bean id="beanAware" class="com.trek.aware.BeanAware"></bean>
使用:
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
BeanAware beanAware = (BeanAware) context.getBean("beanAware");
ApplicationContext ioc = beanAware.getIOC();
User user = (User) ioc.getBean("user");
user.say();
我们首先获取ioc容器,从里面取出实现了ApplicationContextAware接口的对象,
从中调用getIOC()方法获取了Bean.
四 . 实现原理
spring在创建Bean的时候,会自动扫描Bean实现的接口,如果spring扫描到一些特定的接口的实现类,那么spring
就会自动调用一些方法.
这个就是Aware的真正含义.