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

    // 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;

(上文代码)启动项目报错信息

***************************
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' 

正常代码

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修饰的!

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤