Озадачен инъекцией @Resource с атрибутом name

Я озадачен такой инъекцией зависимостей, показанной в качестве примера в spring data redis: https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:serializer

  // inject the template as ListOperations
  @Resource(name="redisTemplate")
  private ListOperations<String, String> listOps;

Принимая во внимание, что redisTemplate является bean-компонентом типа RedisTemplate, как Spring удается получить listOps из bean-компонента redisTemplate?

Это работает, и мне в основном интересно найти часть документации, объясняющую это поведение, или часть кода, обрабатывающего это.

Спасибо за помощь.


person aure_bobo    schedule 28.09.2017    source источник
comment
Ознакомьтесь с этим сообщением.   -  person juanlumn    schedule 28.09.2017
comment
Это не так. RedisTemplate реализует интерфейс ListOperations.   -  person M. Deinum    schedule 28.09.2017
comment
RedisTemplate не реализует ListOperations. Только что нашел ответ здесь: stackoverflow.com/questions/43006197/   -  person aure_bobo    schedule 28.09.2017
comment
Я только что нашел ответ здесь: stackoverflow.com/questions/43006197/   -  person aure_bobo    schedule 28.09.2017


Ответы (1)


На самом деле это работает благодаря классу ListOperationsEditor.

class ListOperationsEditor extends PropertyEditorSupport {
    ListOperationsEditor() {
    }

    public void setValue(Object value) {
        if(value instanceof RedisOperations) {
            super.setValue(((RedisOperations)value).opsForList());
        } else {
            throw new IllegalArgumentException("Editor supports only conversion of type " + RedisOperations.class);
        }
    }
}
person aure_bobo    schedule 28.09.2017