在某些极端情况下,业务要求程序员在开发Bean类时能预先知道该Bean的配置id,此时可借助Spring提供的BeanNameAware接口,通过该接口即可提交预知Bean的配置id.BeanNameAware接口提供了一个方法:setBeanName(Sring name),该方法的name参数就是Bean的id,实现该方法的Bean类就可通过该方法来获得部署该Bean的id了。

下面定义一个Bean,该Bean实现了BeanNameAware接口。

public class Chinese implements BeanNameAware
{// 保存部署该Bean时指定的id属性private String beanName;public void setBeanName(String name){this.beanName = name;}public void info(){System.out.println("Chinese实现类"+ ", 部署该Bean时指定的id为" + beanName);}
}

Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了BeanNameAware接口,Spring容器就会在创建该Bean之后,自动调用该Bean的setBeanName()方法,调用该方法时,会将Bean的配置id作为参数传给该方法——该方法的实现部分将Spring传入的参数(Bean的配置id)赋给该Chinese对象的beanName实例变量,因此接下来即可通过该beanName实例变量来访问容器本身。

下面写个实现的方法。

public class SpringTest
{public static void main(String[] args){// 创建Spring容器,容器会自动预初始化所有Bean实例ApplicationContext ctx =new ClassPathXmlApplicationContext("beans.xml");Chinese chin = ctx.getBean("chinese" , Chinese.class);chin.info();}
}

Spring之获得Bean本身的id相关推荐

  1. spring配置文件中Bean中的id和name的区别

    1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的.总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab   &quo ...

  2. spring中的bean

    实例化spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 ApplicationContext ctx=new ClassPathXmlApplicationContext ...

  3. Spring 中,有两个 id 相同的 bean,会报错吗

    我们知道,spring容器里面的bean默认是单例的,所以id是唯一的.但是需要注意,同一类型的bean可以有不同的id,比如有id1->bean,也可以有id2->bean. 下面再来详 ...

  4. Spring中的Bean配置、属性配置、装配内容详细叙述

    文章目录 1.Bean的配置 1.1.配置方式 2.Bean的实例化 2.1.构造器实例化 2.2.静态工厂方式实例化 2.3.实例工厂方式实例化 3.Bean的作用域 3.1.作用域的种类 4.Be ...

  5. spring(2)装配Bean

    [0]README 0)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  spring(2)装配Bean 的相关知识: 1)在sprin ...

  6. 面试官:Spring代理目标bean时为何通过TargetSource类型对目标bean封装?

    在Spring代理目标bean的时候,其并不是直接创建一个目标bean的对象实例的,而是通过一个TargetSource类型的对象将目标bean进行封装,Spring Aop获取目标对象始终是通过Ta ...

  7. Spring 三种bean装配的方式

    1.使用xml配置文件装配 Spring成功启动的三大要件分别是:Bean定义信息.Bean实现类以及Spring本身. 在xml文件中配置bean,然后使用ClassPathXmlApplicati ...

  8. Spring中的Bean配置

    IOC&DI概述 OPC(Inversion of Control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC ...

  9. Spring 中的 Bean

    前言 欢迎来到本篇文章,鸽了好久了,今天继续写下 Spring 的内容:Spring 中 Bean 的基本概念.基本写法和 3 种实例化 Bean 的方式等. 什么是 Bean? 我们回顾下,什么是 ...

  10. Spring源码——bean的加载

    前言 内容主要参考自<Spring源码深度解析>一书,算是读书笔记或是原书的补充.进入正文后可能会引来各种不适,毕竟阅读源码是件极其痛苦的事情. 本文主要涉及书中第五章的部分,依照书中内容 ...

最新文章

  1. String、StringBuffer、与StringBuilder的区别
  2. java增加缓存,java – 如何增加Integer对象的缓存大小
  3. 225. Implement Stack using Queues
  4. Nginx——事件驱动机制(雷霆追风问题,负载均衡)
  5. 看不清的融资迷局 二线玩家字节跳动在打什么主意?
  6. 细说ASP.NET Forms身份认证
  7. 黑匣子解密要多久_科普|飞机上的黑匣子内置电池可工作多久?
  8. mycat分库分表建索引
  9. 【Angular 4】响应式编程
  10. 人工智能重点领域有哪些呢?
  11. 微信全球MBA创新大赛Roadshow最终站火爆中欧
  12. 【转】浅论ViewState及其与Session的关系
  13. 简易python爬虫 - 爬取站长论坛信息
  14. OC 教程 极光推送
  15. cad画正弦曲线lisp_cadlisp基础教程.pdf
  16. 老版本MACBOOK更换固态硬盘教程
  17. [luogu p1069] 细胞分裂
  18. RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法(java实现)
  19. Git vs GitHub –什么是版本控制及其工作方式?
  20. Apache Ranger安全区介绍

热门文章

  1. 搭建和测试 Redis 主备和集群
  2. 图片的压缩(上传图片太大的话,上传不到服务器)
  3. 第15届创新英语大赛初赛第二阶段题目
  4. (大数据工程师学习路径)第三步 Git Community Book----基本用法(下)
  5. Handler 、 Looper 、Message
  6. 【Asp.Net从零开始】:使用缓存来提高网站性能 Caching(一)
  7. php 新浪ip接口,php利用新浪接口查询ip获取地理位置示例
  8. 设计模式七大原则简述
  9. MySQL使用注意事项(一)
  10. Linux下学习进程控制