gpt4 book ai didi

java - 关于与另一个函数的参数具有相同类型和不同参数的 spring bean 的混淆

转载 作者:行者123 更新时间:2023-11-30 02:00:12 25 4
gpt4 key购买 nike

为了自定义LettuceConnectionFactory,我创建了两个函数,它们具有相同的返回类型和不同的参数,一个是单节点配置,另一个是集群配置。代码如下:

@Component
@Configuration
public class RedisConfig {

@Bean(name = "singleFactory")
public LettuceConnectionFactory createSingleFactory(RedisSingleConfig redisSingleConfig){...}

@Bean(name = "clusterFactory")
public LettuceConnectionFactory createClusterFactory(RedisClusterConfig redisClusterConfig){...}

}

当它们被调用时,返回值(LettuceConnectionFactory)是另一个函数的参数。代码如下:

@Autowired
private RedisActivityClusterConfig testConfig;

@Autowired
private RedisItemConfig redisItemConfig;

@Autowired
private RedisConfig redisConfig;

@Autowired
private StringRedisTemplate redisTemplate;

@Test
public void test(){
redisTemplate.setConnectionFactory(redisConfig.createClusterFactory(testConfig));
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
System.out.println(valueOperations.get("test"));
}

但是这样,spring会报告没有可用的'org.springframework.data.redis.connection.RedisConnectionFactory'类型的合格bean:预期单个匹配bean,但发现2:singleFactory,clusterFactory

<小时/>

添加问题:

由于项目稍微复杂一些,有很多个redis单机服务器A、B、C...和集群服务器A、B、C...,并且它们有不同的ip、端口和池策略。我最初的想法是,通过注入(inject)不同的redisConfig作为参数,例如RedisConfig_A,RedisConfig_B,RedisConfig_C(配置可以通过资源中的redis.properties获取)来动态生成不同的LettuceConnectionFactories,然后使用这些LettuceConnectionFactories创建自定义的RedisTemplates。我的困惑是,这些对象:RedisConfig、LettuceConnectionFactories 是否可以 Autowiring ?尝试了很多方法,还是不行...

最佳答案

@Autowired 注解告诉 Spring 注入(inject)点在哪里(即需要发生注入(inject)的位置)。在找到这样的注入(inject)点时,Spring会尝试查找相同类型的已配置bean(通过@Bean配置),如果找到这样的bean,则会将其注入(inject)到注入(inject)中观点。

如果它找到两个或更多这样的bean,它将抛出异常。为了避免异常,我们必须使用@Qualifier注释。

关于java - 关于与另一个函数的参数具有相同类型和不同参数的 spring bean 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com