首页 > 其他分享 >spring boot中通过注解@Bean声明的bean的名称是什么?

spring boot中通过注解@Bean声明的bean的名称是什么?

时间:2022-12-07 21:41:48浏览次数:36  
标签:applicationContext name spring boot Bean Queue bean log


问题

spring boot中我们常常会在configuration类中通过@Bean注解去声明Bean。
但是很多人不清楚默认情况下,通过@Bean注解声明的Bean的名称是什么?

请问,如下代码声明bean的名称是什么?

@Configuration
public class LogAutoConfigure {
@Bean
public Queue queueTest() {
return new Queue("log-queue", true);
}
}

为什么我们要关注声明bean的名称,这是由于spring容器中的bean默认是单例模式的,如果声明的bean的名称一样,就无法识别出具体调用哪一个。在调用的时候就会出错。

The bean 'queueTest', defined in class path resource [com/hcf/base/log/config/LogDataSourceConfig.class], could not be registered. A bean with that name has already been defined in class path resource

试验

@Configuration
public class LogConfigure {
@Bean(name="queue-test")
public Queue queue() {
return new Queue("log-queue1", true);
}

@Bean
public Queue queueTest() {
return new Queue("log-queue2", true);
}
}

使用单元测试去获取spring容器中的baen

@Component
public class ApplicationContextHelper implements ApplicationContextAware {
private static ApplicationContext applicationContext;

public ApplicationContextHelper() {
}

/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextHelper.applicationContext = applicationContext;
}

/**
* 获得spring上下文
* @return
*/
public ApplicationContext getApplicationContext() {
return applicationContext;
}

public Object getBean(String beanName) {
return applicationContext != null ? applicationContext.getBean(beanName) : null;
}
}
@SpringBootTest(classes = LogApplication.class)
class LogApplicationTests {
@Autowired
ApplicationContextHelper contextHelper;

@Test
void testGetBean(){
Queue queue1 = (Queue) contextHelper.getBean("queue-test");
System.out.println(queue1);

Queue queue2 = (Queue) contextHelper.getBean("queueTest");
System.out.println(queue2);
}
}

执行单元测试的结果:

Queue [name=log-queue1, durable=true, autoDelete=false, exclusive=false, arguments={}, actualName=log-queue1]
Queue [name=log-queue2, durable=true, autoDelete=false, exclusive=false, arguments={}, actualName=log-queue2]

结论

通过观察我们不难发现,默认情况下,使用 @Bean声明一个bean,bean的名称由方法名决定。此外,可以通过@Bean注解里面的name属性主动设置bean的名称。

注入指定名称的bean

@Autowired
@Qualifier("queue-test")
private Queue queue;

典型场景

多数据源配置场景:

每个数据源都使用setDataSource()方法配置数据源,所以要使用@Bean(name = “j3sqlDataSource”)中通过name主动说明bean的名字

spring boot中通过注解@Bean声明的bean的名称是什么?_spring


spring boot中通过注解@Bean声明的bean的名称是什么?_java_02


消息队列中,多队列声明

这里通过采用不同的方法名,声明多个队列和交换器,避免bean的名称重复

spring boot中通过注解@Bean声明的bean的名称是什么?_spring boot_03


spring boot中通过注解@Bean声明的bean的名称是什么?_bean_04

总结

1、spring boot中通过@Bean声明bean,默认情况下,bean的名称由方法名决定。另外,可以通过@Bean注解里面的name属性主动设置bean的名称。
2、通过@Autowired和@Qualifier(“queue-test”)结合使用,可以注入指定名称的bean

更多精彩,关注我吧。

spring boot中通过注解@Bean声明的bean的名称是什么?_Qualifier_05


标签:applicationContext,name,spring,boot,Bean,Queue,bean,log
From: https://blog.51cto.com/u_15905482/5920081

相关文章

  • Spring boot属性文件加载和生效顺序深度分析
    springboot最核心的特性就是自动化配置,我们在学习springboot的时候,首要需要了解它的自动化配置原理,其次是属性文件的加载顺序,我认为这两点是学习springboot的重中之中。......
  • jQuery、Bootstrap页面框架
    今日内容概要jQuery查找标签jQuery节点操作jQuery事件绑定Bootstrap页面框架今日内容详细jQuery查找标签1.基本选择器 $('#d1') id选择器$('.c1') clas......
  • jQuery查找标签、节点操作、事件绑定、Bootstrap页面框架
    jQuery查找标签、节点操作、事件绑定、Bootstrap页面框架一、jQuery查找标签1.各种选择器1.基本选择器$('#id')id选择器$('.c1')类(cl......
  • Bootstrap页面框架
    Bootstrap页面框架Bootstrap页面框架是已经提前写好了一大堆css和js,我们只需要引入之后按照人家规定好的操作方式即可使用所有的样式和功能。Bootstrap链接:https://v3.b......
  • 前端 jQuery与Bootstrap
    jQuery查找标签//1.基本选择器$('#d1')id选择器$('.c1')class选择器$('div')标签选择器$("*")......
  • 前端之Bootstrap框架
    Bootstrap页面框架别人已经提前写好了一大堆css和js,我们只需要引入之后按照人家规定好的操作方式即可使用所有的样式和功能。 Bootstrap下载官网地址:https://v3.bootcs......
  • 进入python的世界_day47_前端——JQ补充、bootstrap前端框架
    一、jQuery补充​ 说在最前面,如果想把JQ对象赋值给一个变量名,起名字依旧要讲究,建议名字前加$,这样别人一看就知道是JQ对象1.筛选器//1.属性选择器$('username')//......
  • Spring Cloud之统一配置中心Config初体验
    对于配置的重要性懂的都懂。在普通的单体应用中通常使用配置文件管理应用的所有配置(*.yml/*.properties),但随着微服务数量会在产品中不断增加,考虑系统的可伸缩性和可......
  • 前端开发 6 jQuery使用与Bootstrap
    今日内容详细目录今日内容详细jQuery查找标签1.基本选择器2.组合选择器3.层级选择器4.属性选择器5.基本筛选器6.表单筛选器7.筛选器方法操作标签jQuery事件事件相关补充jQ......
  • jQuery与Bootstrap
    今日内容概要jQuery查找标签jQuery节点操作jQuery事件绑定Bootstrap页面框架今日内容详细jQuery查找标签1.基本选择器 $('#d1') id选择器 $('.c1') class......