개발자가 직접 컨트롤이 안되는 라이브러리에 class들을 Bean으로 지정하고 싶을 때는 메서드에 @Bean + @Configuration
어노테이션을 사용하고, 개발자가 직접 만든 class를 Bean으로 지정하고 싶을 때는 @Component
어노테이션을 사용하면 된다.
@Component
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String host;
@Value("${spring.data.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
RedisConfig를 설정하는데 오류가 발생했다.
다시 보니 class에 @Component로 설정이 되어 있었다.
개발자가 직접 컨트롤 할 수 없기에 @Configuration을 사용한다.
메서드를 Bean으로 등록하기 위해서는 @Bean 어노테이션을 사용했으며 1개 이상의 @Bean을 제공하는 class인 경우이기 때문에 @Configuration을 사용한다.
@Component를 @Configuration으로 변경하니 잘 작동하는 것을 확인할 수 있었다.