У меня есть код, который пытается переопределить bean-компонент ( RedisIndexedSessionRepository ), определенный во внешней зависимости (spring-session-data-redis: 2.2.0).
Вот полный источник класса с определением бина . Соответствующая часть ниже:
@Configuration(proxyBeanMethods = false)
public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguration
implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware {
// ...
@Bean
public RedisIndexedSessionRepository sessionRepository() {
// constructs and returns sessionRepository
}
// ...
@EnableScheduling
@Configuration(proxyBeanMethods = false)
class SessionCleanupConfiguration implements SchedulingConfigurer {
private final RedisIndexedSessionRepository sessionRepository;
SessionCleanupConfiguration(RedisIndexedSessionRepository sessionRepository) {
this.sessionRepository = sessionRepository;
}
// ...
}
}
А вот код, пытающийся переопределить bean-компонент:
@EnableRedisHttpSession
@Configuration
public class CustomRedisHttpSessionConfiguration extends RedisHttpSessionConfiguration {
// ...
@Bean
@Primary
public RedisIndexedSessionRepository customSessionRepository() {
RedisIndexedSessionRepository sessionRepository = super.sessionRepository();
// custom config code
return safeRepository;
}
// ...
}
Когда я пытаюсь запустить приложение, в консоль записывается ошибка:
Параметру 0 конструктора в org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration $ SessionCleanupConfiguration требуется один компонент, но найдено 2: // перечисляет компоненты из обоих классов здесь Действие:
Попробуйте пометить один из компонентов как @Primary, обновить получателя для приема нескольких компонентов или использовать @Qualifier для определения компонента, который следует использовать
Любые идеи почему @ Primary здесь не учитывается?