Spring Bean名称

除了未明确指定名称的情况外,Spring Bean名称很简单。 首先, 这种方式为基于XML的bean定义指定Spring bean名称:

<bean name='sampleService1' class='mvcsample.beanname.SampleService'><constructor-arg><bean class='mvcsample.beanname.SampleDao'></bean></constructor-arg>
</bean>

对于基于Java @Configuration的Bean定义,带@Bean注释的方法的方法名称将成为Bean名称:

@Configuration
@ComponentScan(basePackages='mvcsample.beanname')
public static class SpringConfig{@Beanpublic SampleService sampleService(){return new SampleService(sampleDao());}@Beanpublic SampleDao sampleDao(){return new SampleDao();}}

对于基于构造型注释 (@ Component,@ Service,@ Repository等)的bean,值字段指示bean名称:

@Repository('aSampleDao')
public class SampleDao {...
}@Service('aSampleService')
public class SampleService {...
}

现在,在未指定Bean名称的情况下会发生什么。

基于XML的Bean配置案例:

对于基于xml的配置,通常不指定Bean名称的情况适用于可以作用于整个Bean工厂的Bean,例如,例如定义BeanPostProcessor或BeanFactoryPostProcessor 。 考虑下面的虚拟BeanPostProcessor,它仅从Bean工厂获取所有Bean名称:

public class BeanNameScanningBeanPostProcessor implements BeanPostProcessor{private List<String> beanNames = new ArrayList<>();@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {beanNames.add(beanName);return bean;}public List<String> getBeanNames(){return this.beanNames;}
}

通常可以通过以下方式在xml bean配置中定义它:

<bean class='mvcsample.beanname.BeanNameScanningBeanPostProcessor'/>

第二种情况是基于XML的配置,其中通常不指定名称,例如内部Bean。 这样定义:

<bean class='mvcsample.beanname.SampleService'><constructor-arg><bean class='mvcsample.beanname.SampleDao'></bean></constructor-arg>
</bean>

这些情况下的Bean名称由一个名为BeanNameGenerator的组件处理。 对于顶级bean,该名称通常以符合包的类名以及实例数的形式结束,这种方式是:

mvcsample.beanname.BeanNameScanningBeanPostProcessor#0

对于内部bean,由于它仅存在于其包含bean的范围内,因此名称并不相关,但是在内部,它确实基于bean定义的十六进制哈希码(例如'mvcsample)获得名称。 beanname.SampleDao#1881ee8b'

基于Java的@Configuration案例:

另一方面,对于基于Java的@Configuration,无法指定没有名称的bean,bean名称是方法名。

基于注释的配置

对于基于构造型注释的Bean,如果未使用构造型注释的value字段显式指定名称,则该名称再次由AnnotationBeanNameGenerator生成,后者是BeanNameGenerator策略接口的实现,生成的名称只是该类的简称。 ,例如从AnnotationBeanNameGenerator的javadoc中获取-com.xyz.FooServiceImpl的bean名称变为fooServiceImpl。

结论:

因此,最后得出结论,如果Bean名称以某种方式与您相关(例如,为了消除多个相同类型的Bean实例之间的歧义),则最好明确名称,否则依靠Spring生成用于您。 在某些情况下,例如 使用Spring-data项目,可以将存储库的自定义行为指定为单独的Bean,
默认情况下,Spring-data使用Spring命名约定来查找自定义实现,并且了解如何生成Bean名称会有所帮助。

参考: all和其他博客中来自JCG合作伙伴 Biju Kunjummen的Spring Bean名称 。

翻译自: https://www.javacodegeeks.com/2013/02/spring-bean-names.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式框架Bootstrap栅格系统

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。Bootstrap 提供了一些辅助类&#xff0c;以便更快地实现对移动设备友好的开发。这些可以通过媒体查询结合大型、小型和中型设备&#xff0c;实现内容对设备的显示和隐…

JAVA基础_泛型

什么是泛型泛型是提供给javac编译器使用的&#xff0c;可以限定集合中的输入类型&#xff0c;让编译器挡住源程序中的非法输入&#xff0c;编译器编译带类型说明的集合时会去除掉”类型”信息&#xff0c;是程序的运行效率不受影响&#xff0c;对于参数化的泛型类型&#xff0c…

python!!!!惊了,这世上居然还有这么神奇的东西存在

第一次接触到python的时候实在看学习3Blue1Brown的视频线性代数的本质的时候。惊奇的是里面的视频操作&#xff0c;例如向量的变化&#xff0c;线性变换等都是由python用代码打出来的。那时的我只是以为python是类似matlab类型的数学软件。人工智能&#xff0c;大数据的兴起&am…

int定义源码 python_python学习(第一章)

1.print输出语句# 输出字符串 print(hello) # 输出数字 print(234) print("I come from China") print("I come from China") # 输出表达式 print(71) # 将数据输出到文件中 file fp open(D:/pythoncode.txt, a) print("I come from China",…

使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

毫无疑问&#xff0c; JAX-RS是一项杰出的技术。 即将发布的规范JAX-RS 2.0带来了更多的强大功能&#xff0c;尤其是在客户端API方面。 今天的帖子的主题是JAX-RS服务的集成测试。 有很多出色的测试框架&#xff0c;例如REST可以确保提供帮助&#xff0c;但是我要展示的方式是使…

android设置控件形状,Android控件自定义形状

Android中处理控件的各种形状可以用到Shape&#xff0c;ApiDemos中有相关的例子&#xff0c;在com.example.android.apis.graphics中的ShapeDrawable1类中有很详细的介绍和例子。使用xml的方法也能达到同样的效果&#xff0c;而且更加方便。如下面的代码所示&#xff1a;XML/HT…

赋值

非阻塞赋值产生寄存器&#xff0c;a<b,b<c. a的值传给c需要两个时钟&#xff0c;两条语句同时执行。阻塞赋值ab&#xff0c;bc&#xff0c;两条语句顺序执行&#xff0c;不产生寄存器。 小明教ic4转载于:https://www.cnblogs.com/xiaoxuesheng993/p/7503893.html

python web开发-flask访问请求数据request

Request对象在web应用的开发中是一个非常重要的对象&#xff0c;主要用来获取用户发来的请求数据。 常用属性参考&#xff1a;http://docs.jinkan.org/docs/flask/api.html#flask.request 下面我们以一个表单提交的例子来说明一些常用request属性的使用。 创建一个表单的templa…

ActiveMQ群集,持久订阅者和虚拟主题可助您一臂之力

因此&#xff0c;您希望跨分布式主题使用ActiveMQ进行发布-订阅&#xff0c;并且要可靠。 您可以只使用永久订阅&#xff0c;对不对&#xff1f; 可以&#xff0c;但是&#xff0c;如果将群集与ActiveMQ一起使用&#xff0c;则可能会遇到意外行为。 我最近在一个客户端上&#…

android 对称加密和非对称加密,Android开发加密之对称与非对称加密算法使用案例.pdf...

Android开发加密之对称与非对称加密算法使用案例消息摘要md5&#xff1a;登录注册&#xff0c; sha1对称加密 1.des:Data Encryption Standard&#xff0c;数据加密标准 2.aes&#xff1a;Advanced Encryption Standard &#xff0c;更高级的方式对称加密特点&#xff1a;加…

unity 半透明混合问题_Unity 实时 半透明 阴影 shader

简单阴影制作思路&#xff1a;1&#xff1a;在角色脚底 放置一块平板2&#xff1a;shader中 根据平板传入的矩阵 以及 光照 对角色进行变换3&#xff1a; 得到投影在地面上的阴影4&#xff1a;阴影直接渲染到 屏幕上缺点&#xff1a;上面的阴影无法 增加半透明阴影效果&#xf…

Showplan 逻辑运算符和物理运算符参考

本文档已存档&#xff0c;并且将不进行维护。运算符说明了 SQL Server 如何执行查询或数据操作语言 (DML) 语句。 查询优化器使用运算符生成查询计划&#xff0c;以创建在查询中指定的结果或执行在 DML 语句中指定的操作。 查询计划是由物理运算符组成的一个树。 您可以使用 SE…

在win10中通过Anaconda3安装tensorflow

安装Anaconda3&#xff0c;然后在所有程序中启动“Anaconda Navigator”&#xff0c;如图&#xff1a; 切换到“Enviroments"(环境)中&#xff0c;在右边有个显示环境的列表&#xff0c;默认有"base(root)"&#xff0c;然后单击底部的”Create"按钮创建一个…

ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps

拼 命 加 载 中 ... 随着去年Q4季度DRAM芯片价格开始下跌,DDR4内存的价格已经有了松动,很多人还期待着8GB内存降回200多元的价格呢。现在的DDR4内存已经有了继任者——DDR5,标准及芯片生产都完成了,不过尚无平台支持,最快今年底才会有DDR5内存上市,更多地还是2020年上市。…

功能接口简介–在Java 8中重新创建的概念

世界各地的所有Java开发人员都将至少使用以下接口之一&#xff1a;java.lang.Runnable&#xff0c;java.awt.event.ActionListener&#xff0c;java.util.Comparator&#xff0c;java.util.concurrent.Callable。 声明的接口之间有一些共同的特征&#xff0c;该特征是它们在接口…

计算机专业职业规划范文800字,计算机专业学生职业生涯规划书

作为一名计算机学生&#xff0c;这门专业比较难学&#xff0c;所以在进入大学后&#xff0c;我必须得为自己做一份职业生涯规划&#xff0c;让自己在大学几年里能完成学业&#xff0c;成功的奔赴社会工作。一、自我分析我虽然是自己选的计算机专业&#xff0c;但是兴趣并不是很…

Python核心模块——urllib模块

urllib模块中的方法 1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法&#xff0c;返回一个文件对象&#xff0c;然后可以进行类似文件对象的操作。本例试着打开google >>> import urllib >>> f urllib.urlopen(http://www.google.com.hk/) >&…

HTML 中点击a标签,页面跳转执行过程

HTML链接使用的是<a>标签点击超链接,后台的执行大致如下:<a href"https://www.baidu.com">超链接</a>根据链接地址看出,执行的是https协议点击超链接,首先在本地的hosts文件(C:\Windows\System32\drivers\etc\hosts)中查找是否有与网址匹配的ip如果…

JS中原型与原型链

一. 普通对象与函数对象 JavaScript 中&#xff0c;万物皆对象&#xff01;但对象也是有区别的。分为普通对象和函数对象&#xff0c;Object 、Function等 是 JS 自带的函数对象。下面举例说明。 var o1 {}; var o2 new Object(); var o3 new f1();function f1(){}; var f2…

计算机专业学生求职信500字,计算机专业求职信500字范文

计算机专业求职信500字范文尊敬的领导&#xff1a;您好&#xff01;请恕打扰&#xff0c;我是荆楚理工学院计算机工程学院的一个大学生&#xff0c;即将面临毕业.我很荣幸有机回向您呈上我的个人资料.在投身社会之际,为了找到符合自己专业和兴趣的工作,更好地发挥自己的才能,实…