首页 > 其他分享 >Spring中Bean的命名问题及ref和idref之间的区别

Spring中Bean的命名问题及ref和idref之间的区别

时间:2022-12-28 11:00:11浏览次数:75  
标签:name Spring 指定 Bean idref ref id

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查。

 

Spring中Bean的命名

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

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

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

此时需要通过接口getBean(Class<T>

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

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

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

 

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

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

6、可以使用<alias>标签指定别名,别名也必须在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"></property>
</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</value></constructor-arg>

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

1、local 只能指定与当前配置的Bean在同一个配置文件中的Bean定义的名称;
2、parent 只能指定位于当前容器的父容器中定义的对象引用;
3、bean 基本上通吃,即包括以上两种情况都可以,所以,通吃情况下,直接使用bean来指定对象引用就可以了。
所以,上面那段配置代码中,beanID这个Bean中构造函数的参数name注入的只是“bea”这个字符串;而其id属性注入的则是testString这个字符串。

​http://www.xuebuyuan.com/577235.html​

 



标签:name,Spring,指定,Bean,idref,ref,id
From: https://blog.51cto.com/u_15147537/5973921

相关文章

  • spring事务理解
    分布式事务中是否可以有加锁解锁的逻辑?可以,但是不规范的话会有线程安全问题。下方逻辑:在解锁后,并发线程会再执行一遍锁里的逻辑,因为此时事务未提交,在隔离级别不是readun......
  • SpringBoot MultipartFile 上传文件null
    开发环境Springboot1.5.2使用方法,一开始直获取文件为null,不加required=false接口无法访问@PostMapping("/import")publicvoidimportTest(@RequestParam(v......
  • spring 基础2
    方便复习,转载于尚硅谷:https://www.yuque.com/tmfl/spring/of3mbz#3e4ec32a5、Spring的AOP5.1、AOP的相关概念在软件业,AOP为AspectOrientedProgramming的缩写,意为:面向......
  • Spring Cloud Alibaba之Nacos
    目录结构:一、SpringCloudAlibaba简介二、使用版本情况三、什么是Nacos?四、Nacos运行环境部署五、Nacos注册中心六、Nacos命名空间和分组......
  • Spring学习笔记 - 第三章 - AOP与Spring事务
    原文地址:Spring学习笔记-第三章-AOP与Spring事务Spring学习笔记全系列传送门:Spring学习笔记-第一章-IoC(控制反转)、IoC容器、Bean的实例化与生命周期、DI(依......
  • tomcat7运行springboot war包项目启动报错
    报错的log如下:2022-12-2801:11:22.701WARN39756---[localhost-startStop-1]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontext......
  • Spring IOC官方文档学习笔记(五)之bean的作用域
    1.Bean的作用域(1)Bean的作用域即Bean实例的作用范围,Spring支持6种bean的作用域,其中4种只能在web环境中使用,具体如下作用域描述singleton默认作用域,采用单例......
  • 基于springboot+mybatis+mysql+html实现校园宿舍管理系统
    @目录一、系统简介二、系统主要功能界面三、其它系统四、源码下载一、系统简介本系统功能模块主要分为:信息浏览浏览功能、宿舍打卡浏览功能、学生提交信息功能、宿舍搜索......
  • SpringBoot - 注入原生注解 Servlet,Filter,Listener
    @ServletComponentScan(basePackages=“com.atguigu.admin”)指定原生Servlet组件都放在那里@WebServlet(urlPatterns=“/my”)直接响应,没有经过Spring的拦截器@WebF......
  • SpringBoot vue
    springboot整合vue就行前后端完全分离,监听器,过滤器,拦截器https://github.com/ninuxGithub/spring-boot-vue-separateAblogbuiltupwithSpringBootinthebackend......