获得Bean本身的id

在前面的示例程序中,程序总是通过Bean id 主动来获取Bean实例,程序总是先获得Bean id,然后采取获得Bean对象。

但对于一个真正的应用而言,一个Bean与Bean之间的关系是通过依赖注入管理的,常常不会通过调用容器的getBean 方法来获取Bean实例。可能的情况是:应用中已经获得了Bean实例的引用,但程序无法知道配置该Bean时指定的id属性,而程序又需要获取配置该Bean时指定的id属性。此时可借助于Spring提供的BeanNameAware接口,通过该接口允许Bean类获取部署该Bean时指定的id 属性。


BeanNameAware接口提供一个方法:setBeanName(String name),该方法的name参数就是Bean的id,实现该方法的Bean类就可通过该方法来获得部署该Bean的id了(该方法与前面介绍的BeanFactoryAware、ApplicationContextAware接口中的setter方法一样,这个setter方法不是由程序员来调用的,该方法由Spring容器负责调用)。


package UnderstandingBeanInContainer;

import org.springframework.beans.factory.BeanNameAware;

public class Chinese implements BeanNameAware {
	
	//保存部署该Bean时指定的id属性
	private String beanName;
	
	@Override
	public void setBeanName(String name) {	//该方法的name参数就是Bean的id
		// TODO Auto-generated method stub
		this.beanName = name;
	}

	public void info(){
		System.out.println("UBIC~Chinese实现类"+",部署该Bean时指定的id为"+beanName);
	}
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.springframework.org/schema/beans"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"
>
	<bean id="chineseBI" class="UnderstandingBeanInContainer.Chinese"/>
</beans>


package UnderstandingBeanInContainer;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ctx =
				new ClassPathXmlApplicationContext("bean.xml");
		
		Chinese chin = ctx.getBean("chineseBI",Chinese.class);
		chin.info();
	}
}



当Spring容器完成了Bean初始化动作(包括回调实现InitializingBean接口所实现的afterPropertiesSet()方法、回调Bean配置中init-method属性所指定的方法)之后,回调实现BeanNameAware接口里的setBeanName(string name)方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值