import java.util.Locale;
import com.bea.core.repackaged.springframework.beans.BeansException;
import com.bea.core.repackaged.springframework.context.ApplicationContext;
import com.bea.core.repackaged.springframework.context.ApplicationContextAware;
public class Person implements ApplicationContextAware {
//将BeanFactory 容器以成员变量保存
private ApplicationContext ctx;
/**
* 注意: Spring容器会检测容器中所有的Bean,如果发下某一个Bean实现了ApplicationContextAware 接口;
* Spring容器会创建该Bean之后,自动调用该方法,调用改方法时,回见容器本身作为参数传递给改方法
*/
@Override
public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
this.ctx = ctx;
}
public void sayHi(String name) {
System.out.println(ctx.getMessage("hello", new String[] {},
Locale.getDefault()));
}
}
Spring容器会检测容器中所有的Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传递给改方法——该方法的实现部分会将Spring传入的参数(容器本身)赋给该Person对象的ctx实例变量,因此接下来可以通过该ctx实例变量来访问容器本身。