成都网站建设 致尚,做复印机的模板网站,湘潭网站建设网站,微商货源网平台简介
Spring 中大量使用到 Bean 的注入来实现各个模块之间的依赖#xff0c;本章将详细介绍 Bean 的主要属性
id 和 name 属性 每个 Bean 可以有一个 id 属性#xff0c;并可以根据该 id 在 IoC 容器中查找该 Bean#xff0c;该 id 属性值必须在IoC 容器中唯一 可以不指定…简介
Spring 中大量使用到 Bean 的注入来实现各个模块之间的依赖本章将详细介绍 Bean 的主要属性
id 和 name 属性 每个 Bean 可以有一个 id 属性并可以根据该 id 在 IoC 容器中查找该 Bean该 id 属性值必须在IoC 容器中唯一 可以不指定 id 属性只指定全限定类名例如
bean classcom.zyh.spring3.hello.StaticBeanFactory/此时需要通过接口 getBean(Class requiredType)来获取Bean
如果该Bean找不到则抛异常NoSuchBeanDefinitionException
如果该类型的Bean有多个则抛异常NoUniqueBeanDefinitionException 如果不指定id只指定name那么 name 为 Bean 的标识符并且需要在容器中唯一 同时指定 name 和 id此时 id 为标识符而 name 为 Bean 的别名两者都可以找到目标 Bean 可以指定多个 name之间可以用分号“”、空格“ ”或逗号“”分隔开如果没有指定id那么第一个 name 为标识符其余的为别名若指定了 id 属性则 id 为标识符所有的 name 均为别名例如
bean idhello1 namealias1 alias2;alias3,alias4 classcom.zyh.spring3.hello.HelloWorldconstructor-arg index0 valueRod/
/bean此时hello1 为标识符而 alias1alias2alias3alias4为别名它们都可以作为 Bean 的键值
可以使用标签指定别名别名也必须在IoC容器中唯一例如
bean namebean classcom.zyh.spring3.hello.HelloWorld/
alias aliasalias1 namebean/
alias aliasalias2 namebean/ref 和 idref 属性 在 Spring 中idref 属性和 ref 属性都可以用在 constructor-arg 元素和 property 元素中完成注入那么它之间有什么区别呢有如下一段配置
bean idbea classjava.lang.String constructor-arg index0 valuetestString/value /constructor-arg
/bean
bean idbeanID classcom.zyh.spring3.hello.HelloWorld constructor-arg namename idref beanbea / /constructor-arg property nameid ref localbea / /property property nameage value25/
/bean其实idref 注入的是目标 bean 的 id 而不是目标 bean 的实例同时使用 idref 容器在部署的时候还会验证这个名称的 bean 是否真实存在其实 idref 就跟 value 一样只是将某个字符串注入到属性或者构造函数中只不过注入的是某个 Bean 定义的 id 属性值所以上面的代码中
constructor-arg namename idref beanbea /
/constructor-arg其实等价于
constructor-arg namename valuebea/而 ref 则是完全地不同ref 元素是将目标 Bean 定义的实例注入到属性或构造函数中ref 元素有三个属性区别如下
(1) local 只能指定与当前配置的 Bean 在同一个配置文件中的 Bean 定义的名称
(2) parent 只能指定位于当前容器的父容器中定义的对象引用
(3) bean 基本上通吃即包括以上两种情况都可以所以通吃情况下直接使用 bean 来指定对象引用就可以了。 所以上面那段配置代码中beanID 这个 Bean 中构造函数的参数 name 注入的只是 “bea” 这个字符串而其 id 属性注入的则是 testString 这个字符串