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.. .
|
分享到:
相关推荐
- 从实例化到销毁,Bean经历一系列步骤,包括设置属性、接口回调、初始化方法的调用等。 - 最终,当Spring容器关闭或者Bean不再需要时,Spring会调用`DisposableBean`的`destroy()`方法或指定的销毁方法。 了解和...
- 介绍了如何使用初始化和销毁回调来管理bean的生命周期。 - **4.6.2 ApplicationContextAware和BeanNameAware** - 介绍了如何让bean实现这两个接口以获得额外的信息。 - **4.6.3 其它Aware接口** - 介绍了Spring...
4. **BeanNameAware 接口回调**:如果该 Bean 实现了 `BeanNameAware` 接口,Spring 将 Bean 的 ID 传递给 `setBeanName()` 方法。 5. **BeanFactoryAware 接口回调**:如果该 Bean 实现了 `BeanFactoryAware` 接口...
4. 回调实现了 Aware 接口的方法,如 BeanNameAware; 5. 调用 BeanPostProcessor 的初始化前方法; 6. 调用 init 初始化方法; 7. 调用 BeanPostProcessor 的初始化后方法,此处会进行 AOP; 8. 将创建的 Bean 对象放入...
当bean被创建和销毁时,相应的回调方法会被调用,执行特定的操作,如设置属性、执行初始化和销毁逻辑。 综上所述,Spring管理XML方式提供了强大的bean管理和控制能力,包括对象的实例化、依赖注入、生命周期管理等...