为了自定义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/