7.8.5: 获得Bean部署时的id

本文介绍如何使用Spring框架中的BeanNameAware接口来获取Bean的ID属性。通过实现该接口并重写setBeanName方法,可以让Bean类在初始化过程中获取到其在容器中的ID。文中提供了一个简单的示例,展示了如何在一个名为Chinese的Bean类中实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的例子中,程序总是通过Bean id获得Bean对象。

但是在实际中,一个Bean与Bean之间的关系是通过依赖注入管理的,常常不会通过调用容器的getBean方法来获取Bean实例。可能的情况是:应用中已经获得了Bean实例的引用,但程序无法知道配置该Bean时指定的id属性,而程序又需要配置该Bean时指定的id属性。

在某些极端情况下,程序开发Bean类时需要获得在容器中部署该Bean时指定的id属性,此时可借助于Spring提供的 BeanNameAware 接口,通过该接口允许Bean类获取部署该Bean时指定的id属性。

BeanNameAware接口提供的一个方法:setBeanName(String name),该方法的name参数就是Bean的id,实现该方法的Bean类就可通过该方法来获得部署该Bean的id了。


Chinese.java :

public class Chinese implements BeanNameAware{

	private String beanName;
	
	@Override
	public void setBeanName(String name) {
		this.beanName=name;
	}
	
	public void getBeanId(){
		System.out.println("Chinese实现类,部署该Bean时指定的id为:"+beanName);
	}
	
}
bean.xml 核心配置:

<bean id="chinese" class="com.bean.Chinese"/>
Test.java :

public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
		Chinese c=(Chinese) ctx.getBean("chinese");
		c.getBeanId();
	}

}
运行Test.java,控制台输出:

Spring容器何时回调Bean实例的setBeanName(String name)方法呢?Spring容器会在Bean初始化完成后回调该方法------这里的初始化指的是Bean的初始化行为包括回调实现InitializingBean接口所实现的afterPropertiesSet方法,回调Bean配置中init-method属性指定的方法。当Spring容器完成了Bean的初始化动作之后,接下来将会回调实现BeanNameAware接口里的setBeanName(String name)方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值