Использование @Configuration для доступа к конфигурациям в приложении весенней загрузки - PullRequest
1 голос
/ 10 июля 2020

Я создаю собственный класс десериализатора, который необходимо прочитать в некоторых настраиваемых конфигурациях в моем приложении Spring Boot. Мой класс выглядит примерно так:

@Configuration
public class ItemDeserializer extends StdDeserializer<Item> { 
 
    @Value("${config.name}")
    private String nameConfig;

    public ItemDeserializer() { 
        this(null); 
    } 
 
    public ItemDeserializer(Class<?> vc) { 
        super(vc); 
    }
 
    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        
        //read in item name based on configuration value
        String itemName = node.get(nameConfig).asText();
 
        return new Item(itemName);
    }
}

, и я вызываю его в классе Item следующим образом:

@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
      private String itemName;

      //getters and setters
}

Поле nameConfig никогда не устанавливается с соответствующим значением конфигурации . Добавление @Configuration работает в других частях моего приложения, но эти классы включают аннотации @Bean и другие вещи, которые, как я подозреваю, необходимы. Как я могу аннотировать этот класс, чтобы эта работа работала?

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Решение: SpringBeanAutowiringSupport, если вы используете Spring Framework 2.5 +.

public class ItemDeserializer extends StdDeserializer<Item> { 
 
    @Value("${config.name}")
    private String nameConfig;

    public ItemDeserializer() { 
        this(null); 
    } 
 
    public ItemDeserializer(Class<?> vc) { 
     super(vc);        
     SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);    
        
    }
 
    @Override
    public Item deserialize(JsonParser jp, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        
        //read in item name based on configuration value
        String itemName = node.get(nameConfig).asText();
 
        return new Item(itemName);
    }
}
0 голосов
/ 10 июля 2020

@ Configuration указывает, что класс объявляет один или несколько методов @Bean и может быть обработан контейнером Spring для генерации определений bean-компонентов и запросов на обслуживание для этих bean-компонентов во время выполнения.

Вы не сможете использовать Таким образом, вам нужна другая стратегия. Я рекомендую прочитать эту ссылку: https://www.baeldung.com/java-properties

...