当前位置: 首页 > news >正文

Spring3之Bean的属性详解

简介

Spring 中大量使用到 Bean 的注入来实现各个模块之间的依赖,本章将详细介绍 Bean 的主要属性

id 和 name 属性

  1. 每个 Bean 可以有一个 id 属性,并可以根据该 id 在 IoC 容器中查找该 Bean,该 id 属性值必须在IoC 容器中唯一

  2. 可以不指定 id 属性,只指定全限定类名,例如

<bean class="com.zyh.spring3.hello.StaticBeanFactory"/>

此时需要通过接口 getBean(Class requiredType)来获取Bean;

如果该Bean找不到则抛异常:NoSuchBeanDefinitionException

如果该类型的Bean有多个则抛异常:NoUniqueBeanDefinitionException

  1. 如果不指定id,只指定name,那么 name 为 Bean 的标识符,并且需要在容器中唯一

  2. 同时指定 name 和 id,此时 id 为标识符,而 name 为 Bean 的别名,两者都可以找到目标 Bean

  3. 可以指定多个 name,之间可以用分号(“;”)、空格(“ ”)或逗号(“,”)分隔开,如果没有指定id,那么第一个 name 为标识符,其余的为别名;若指定了 id 属性,则 id 为标识符,所有的 name 均为别名;例如

<bean id="hello1"  name="alias1 alias2;alias3,alias4" class="com.zyh.spring3.hello.HelloWorld"><constructor-arg index="0" value="Rod"/>
</bean>

此时,hello1 为标识符,而 alias1,alias2,alias3,alias4为别名,它们都可以作为 Bean 的键值

  1. 可以使用标签指定别名,别名也必须在IoC容器中唯一;例如
<bean name="bean" class="com.zyh.spring3.hello.HelloWorld"/>   
<alias alias="alias1" name="bean"/>   
<alias alias="alias2" name="bean"/>

ref 和 idref 属性
在 Spring 中,idref 属性和 ref 属性都可以用在 constructor-arg 元素和 property 元素中完成注入,那么它之间有什么区别呢?有如下一段配置

<bean id="bea" class="java.lang.String">      <constructor-arg index="0">        <value>testString</value>    </constructor-arg> 
</bean> 
<bean id="beanID" class="com.zyh.spring3.hello.HelloWorld">      <constructor-arg name="name">        <idref bean="bea" />    </constructor-arg>      <property name="id">          <ref local="bea" />      </property>      <property name="age" value="25"/>
</bean>

其实,idref 注入的是目标 bean 的 id 而不是目标 bean 的实例,同时使用 idref 容器在部署的时候还会验证这个名称的 bean 是否真实存在;其实 idref 就跟 value 一样,只是将某个字符串注入到属性或者构造函数中,只不过注入的是某个 Bean 定义的 id 属性值;所以上面的代码中

<constructor-arg name="name">    <idref bean="bea" />
</constructor-arg>

其实等价于

<constructor-arg name="name" value="bea"/>

而 ref 则是完全地不同,ref 元素是将目标 Bean 定义的实例注入到属性或构造函数中,ref 元素有三个属性,区别如下

(1) local 只能指定与当前配置的 Bean 在同一个配置文件中的 Bean 定义的名称

(2) parent 只能指定位于当前容器的父容器中定义的对象引用

(3) bean 基本上通吃,即包括以上两种情况都可以,所以,通吃情况下,直接使用 bean 来指定对象引用就可以了。 所以,上面那段配置代码中,beanID 这个 Bean 中构造函数的参数 name 注入的只是 “bea” 这个字符串;而其 id 属性注入的则是 testString 这个字符串

http://www.lryc.cn/news/7640.html

相关文章:

  • C语言之结构体内存的计算
  • Java网络编程之UDP和TCP套接字
  • Linux进程信号产生以及捕捉
  • 11. GLSL(OpenGL Shader Language)常用知识点汇总
  • 转发一张网络工程师考试的试卷2021.5.15
  • AMD发布23.2.1 新驱动 支持开年新作《魔咒之地》
  • 开放平台如何做接口的签名和加解密?
  • Mr. Cappuccino的第40杯咖啡——Kubernetes之Pod生命周期
  • 记一次OOM
  • idea插件生成dao类service类controller类以及mapper.xml
  • DML 数据操作语言
  • PySpark实战一之入门
  • 【DockerCE】Docker-CE 23.0.1正式版发布
  • vscode开发的Vue家用电器维修服务系统nodejs+mysql
  • PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)
  • 【JavaEE】多线程代码实例:单例模式与阻塞队列BlockingQueue
  • 算法思想 - 搜索算法
  • C#底层库--日期扩展类(上周、本周、明年、前年等)
  • 如何在 Webpack 中开启图片压缩
  • Web-Filter
  • 测试写文章自动保存
  • 云平台搭建实例
  • 【Airplay_BCT】关于Bonjour的概念解答
  • C++深入浅出(九)—— 多态
  • shell学习4
  • VR全景行业的应用价值如何呈现?
  • ESP-IDF:TCP多线程并发服务器
  • Springboot扩展点之SmartInitializingSingleton
  • 基于linux内核的驱动开发学习
  • python3 django gunicorn