spring中bean获取(二)

 spring中获取bean

在上面一章我们分析了AbstractBeanFactory中的doGetBean方法在上面有这个方法transformedBeanName

我们大概说了这个方法是进行名称转换来获取真正的类名称,其中包括别名转换,&特殊名称转换

具体代码如下:

protected String transformedBeanName(String name) {
   return canonicalName(BeanFactoryUtils.transformedBeanName(name));
}

很失望这里啥都没用做只是委托给了另一个方法区执行,我们可以发现这个英文名的解释是(规范的名称)

我们可以看到传入的name被BeanFactoryUtils中方法执行了一次

public static String transformedBeanName(String name) {
   Assert.notNull(name, "'name' must not be null");
   String beanName = name;
   while (beanName.startsWith(BeanFactory.FACTORY_BEAN_PREFIX)) {
      beanName = beanName.substring(BeanFactory.FACTORY_BEAN_PREFIX.length());
   }
   return beanName;
}

上面这个方法我们只需知道

String FACTORY_BEAN_PREFIX = "&";

它上面就是在判断name是不是已&开头如果是我们就切割掉前面的&

接着我们看下面方法

public String canonicalName(String name) {
   String canonicalName = name;
   // Handle aliasing...
   String resolvedName;
   do {
      resolvedName = this.aliasMap.get(canonicalName);
      if (resolvedName != null) {
         canonicalName = resolvedName;
      }
   }
   while (resolvedName != null);
   return canonicalName;
}

这个方法的功能就是用来判断传入的name是否为别名如果为别名就从别名缓存map中获取类名如果不是直接返回名称

 

到这里分析就已经完了,从上我们看到spring的分工是十分明确的每个方法只做自己应该的事:

transformedBeanName 解析掉&号

canonicalName 转换别名为类名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值