前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot相同Name @Bean注解使用

SpringBoot相同Name @Bean注解使用

作者头像
收心
发布2022-01-19 11:19:29
7580
发布2022-01-19 11:19:29
举报
文章被收录于专栏:Java实战博客

单纯测试2个相同Bean 导致报错!

代码语言:javascript
复制
    // Bean name 要与value保持一致 不然回报错哦
    @Bean(name = "redisson1",value = "redisson1")
    public Redisson redisson001() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);
        return (Redisson) Redisson.create(config);
    }

    @Bean(name = "redisson2",value = "redisson2")
    public Redisson redisson002() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(1);
        return (Redisson) Redisson.create(config);
    }

    @Autowired
    private Redisson redisson;

启动项目报错信息

代码语言:javascript
复制
***************************
APPLICATION FAILED TO START
***************************

Description:

Field redisson in com.XXX.XXX.controller.SameNameBeanTest required a single bean, but 2 were found:
	- redisson1: defined by method 'redisson001' 
	- redisson2: defined by method 'redisson002' 

正常代码

代码语言:javascript
复制
import cn.hutool.core.date.DateTime;
import org.redisson.Redisson;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author : zanglikun
 * @date : 2021/12/22 10:48
 * @Version: 1.0
 * @Desc : @Bean的同名处理
 */
@RestController
@RequestMapping("redis")
public class SameNameBeanTest {

    // Bean name 要与value保持一致 不然回报错哦
    @Bean(name = "redisson1", value = "redisson1")
    public Redisson redisson001() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);
        return (Redisson) Redisson.create(config);
    }

    @Bean(name = "redisson2", value = "redisson2")
    public Redisson redisson002() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(1);
        return (Redisson) Redisson.create(config);
    }


    /**
     * Redisson1
     */
    @Autowired()
    @Qualifier(value = "redisson1")
    private Redisson redisson1;

    @GetMapping("redis001")
    public void redis001() {
        redisson1.getBucket("Redis001").set(new DateTime());
    }


    /**
     * Redisson2
     */
    @Resource(name = "redisson2")
    private Redisson redisson2;

    @GetMapping("redis002")
    public void redis002() {
        redisson2.getBucket("Redis002").set(new DateTime());
    }

}

完结!

实际上还有一个解决办法,@Primary。这个注解就是防止找到多个相同名称的Bean的时候优先使用被@Primary修饰的!

特殊说明:以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单纯测试2个相同Bean 导致报错!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档