5.11.4 使用 BeanNameAware 回调本身
如果某个 bean 需要访问配置文件中本身的 id 属性,则可以使用 BeanNameAware 接口,该接口提供了回调本身的能力。实现该接口的 bean,能访问到本身的 id 属性。该接口提供一个方法:voidsetBeanName(String name)。
该方法的 name 参数就是 bean 的 id。该方法在依赖关系设置之后,初始化回调(InitializingBean 的 afterPropertiesSet 方法,或者 init- method 指定的方法)之前被执行。回调 setBeanName 方法可让 bean 获得自己的 id。看如下代码:
public class Chinese implements InitializingBean,BeanNameAware private String beanName; //测试用初始化方法,该方法通过init-method属性确定为初始化方法 public void init() System.out.println("正在执行初始化方法init...") ; //实现 InitializingBean 接口必须实现的方法,初始化方法的一种 public void afterPropertiesSet() throws Exception System.out.println("正在执行初始化方法afterPropertiesSet. .."); /***实现BeanNameAware接口必须实现的方法。 * @Param namebean 的 id. *1public void setBeanName(String name) this.beanName = name; //测试,打印出beanid. System.out.println("回调 setBeanName方法//+name).; |
将该 bean 部署在容器中,与普通bean 的部署没有任何区别。在主程序中通过如下代码测试:
public class SpringTest { public static voidrnain(String[]args)throws Exception ApplicationContext ctx =new FileSysternXmlApplicationContext ("bean.xml");Chinese p = (Chinese)ctx.getBean("chinese"); |
执行结果如下:
[java] 回调 setBeanName方法chinese [java] 正在执行初始化方法afterPropertiesSet. [java] 正在执行初始化方法init.. . |