Весенняя загрузка класса autowired не создается в обычном классе - PullRequest
0 голосов
/ 14 января 2020

Итак, у меня есть внешний класс конфигурации, который внедряет переменные со свойствами из моего файла global.properties.

У меня нет проблем с созданием экземпляра и доступом к объекту в моем основном классе загрузки Spring, но любой другой класс в моем проекте делает внешний конфигурационный объект пустым.

Так выглядит мой внешний конфигурационный класс

@Component
@PropertySource("classpath:global.properties")
public class ExternalConfig {

@Value("${developerName}")
private String developerName;

//getters and setters
public String getDeveloperName() {
    return developerName;
}

public void setDeveloperName(String developerName) {
    this.developerName = developerName;
}

}

Это мой основной класс загрузки Spring

@SpringBootApplication
public class SpringBootMain implements CommandLineRunner {

@Autowired
private ExternalConfig externalConfig;

@Bean
ResourceConfig resourceConfig() {
    return new ResourceConfig().registerClasses(Version1Api.class, Paypal.class);
}

public static void main(String[] args) {
    SpringApplication.run(SpringBootMain.class);
}


@Override
public void run(String... args) throws Exception {
    // TODO Auto-generated method stub
    System.out.println("RUN METHOD");
    System.out.println(externalConfig.getDeveloperName());

}  

}

Однако, если я попытаюсь добавить этот внешний конфигурационный класс в другой класс, такой как мой класс HTTP

@Component
public class Http {
Http() {

}
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Version1Api.class);
@Autowired
private static ExternalConfig externalConfig;

public static void main(String[] args) throws IOException, URISyntaxException {
    logger.info("HTTP Class");
    logger.info(externalConfig.getDeveloperName());
}

Объект всегда нулевой и выдает мне ошибку. Что я делаю неправильно? Должен ли я реализовать свой объект по-другому?

Или я должен реализовывать свой класс HTTP по-другому?

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 14 января 2020

Эту работу можно выполнить, удалив @Autowired из атрибута и установив сеттер.

@Autowired
public void setExternalConfig(ExternalConfig externalConfig){
    Http.externalConfig = externalConfig;
}
...