본문 바로가기
반응형
DevOps/Redis

[Redis] Method annotated with @Bean is called directly. Use dependency injection instead.

by brightGarden02 2023. 9. 9.

Redis 코드를 짜다가 에러가 났다.

@RequiredArgsConstructor
@Component
@EnableRedisRepositories
public class RedisRepositoryConfig {
    private final RedisProperties redisProperties;

    @Bean
    public RedisConnectionFactory redisConnectionFactory(){
        return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }
}

 

 

Method annotated with @Bean is called directly. Use dependency injection instead.

@Bean 설정한 메서드를 주입할 수 없다는 것이다. DI를 권장하고 있다.

 

 

 

생성자를 이용해서 DI를 해보려고 한다.

새로운 RedisConnection 클래스를 만든다.

오류가 났던 메소드인 redisConnectionFactory()를 구현한다.

생성자 이용한 DI를 위해서 @RequiredArgConstructor를 클래스 위에 붙인다.

@RequiredArgsConstructor
@Component
public class RedisConnection {
    private final RedisProperties redisProperties;
    @Bean
    public RedisConnectionFactory redisConnectionFactory(){
        return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
    }
}

 

 

 

RedisRepositoryConfig에서는 RedisConnection 클래스를 가져오고

RedisConnection 클래스에 있는 redisConnectionFactory를 주입하면 해결된다.

@RequiredArgsConstructor
@Component
@EnableRedisRepositories
public class RedisRepositoryConfig {
    private final RedisConnection redisConnection;

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnection.redisConnectionFactory());
        return redisTemplate;
    }
}

 

 

 

오류 없이 redisConnection.redisConnectionFactory()를 이용할 수 있다.

'DevOps > Redis' 카테고리의 다른 글

맥 redis 설치 및 실행하기  (0) 2022.12.05

댓글


반응형
반응형