浅析Spring IoC源码(九)了解BeanNameAware

上一节,我们粗浅的了解了一下BeanFactoryAware这个接口,知道了这个接口的作用,但我们还不了解这个接口存在的意义和价值,还有待我们去学习,这一节我们还需要接着“粗浅”地了解一下另一个接口BeanNameAware

照旧,我们依旧打开BeanNameAware这个的源代码

官方给出的解释:实现该接口的bean会意识到自己在beanfactory的的名字,注意虽然这并不值得推荐一个对象依赖它的名字,因为名字只是这个bean的一个脆弱的依赖或者一个额外的配置,也有可能这个bean的名称只是用于springAPI的一个不必要的依赖


这个接口表面上的作用就是让实现这个接口的bean知道自己在spring容器里的名字,而且听官方的意思是这个接口更多的使用在spring的框架代码中,实际开发环境应该不建议使用,因为spring认为bean的名字与bean的联系并不是很深,(的确,抛开spring API而言,我们如果获取了该bean的名字,其实意义不是很大,我们没有获取该bean的class,只有该bean的名字,我们也无从下手,相反,因为bean的名称在spring容器中可能是该bean的唯一标识,也就是说再beanDefinitionMap中,key值就是这个name,spring可以根据这个key值获取该bean的所有特性)所以spring说这个不是非必要的依赖


照旧,我们举个简单的例子,说明它的作用


MyBeanNameAware.Java


[java]  view plain  copy
  1. package org.study.spring.beannameaware;  
  2.   
  3. import org.springframework.beans.factory.BeanNameAware;  
  4.   
  5. public class MyBeanNameAware implements BeanNameAware{  
  6.   
  7.     public void setBeanName(String name) {  
  8.         System.out.println("my name is "+name);  
  9.     }  
  10.       
  11.       
  12.   
  13. }  

bean-name-aware.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  8.         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd  
  9.         http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd  
  10.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">  
  11.    
  12.       
  13.             
  14.          <bean id="mybeannameaware" class="org.study.spring.beannameaware.MyBeanNameAware"></bean>  
  15.   
  16. </beans>  
MyBeanNameAwareTest.java

[java]  view plain  copy
  1. package org.study.spring.beannameaware;  
  2.   
  3. import org.junit.Test;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. public class MyBeanNameAwareTest {  
  8.       
  9.     @Test  
  10.     public void test2() throws Exception{  
  11.          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean-name-aware.xml");  
  12.          MyBeanNameAware myBeanNameAware = applicationContext.getBean("mybeannameaware",MyBeanNameAware.class);  
  13.     }  
  14.   
  15. }  

运行结果:



这个接口对于spring容器来说,就是可能在spring容器初始化的时候,某些类需要告诉spring容器自己的名称吧~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值