Компонент зависимости загрузки Spring не устанавливает значение

В моем загрузочном приложении Spring у меня есть проект зависимостей Spring. Из своего класса SpringBoot я пытаюсь вызвать класс зависимости, но для этого класса не задано значение.

@CrossOrigin(origins = "*")
@RestController

@Configuration
@ComponentScan(basePackages = "com.dependency.package")
public class BootClass {


    private DependencyClass dependencyClass;


    public BootClass() {
        this.dependencyClass = new DependencyClass();

    }
}

Мой объект DependencyClass просто дает мне пустой объект {}. Любые идеи?

Мой класс Dependency выглядит так:

@Component
public class DependencyClass {


    @Value("${jdbc.driver.class.name}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

}

Спасибо,

Юлиан

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
176
3

Ответы 3

Это классическая ошибка новичков Spring: вызов new для создания экземпляра объекта.

Вы не можете вызвать new, если хотите, чтобы Spring управлял bean-компонентами и предоставлял зависимости. Вы должны передать его фабрике бобов Spring для управления. Все или ничего.

Ваш выглядит как идеальный случай для внедрения конструктора.

@Configuration
@ComponentScan(basePackages = "com.dependency.package")
public class BootClass {


    private final DependencyClass dependencyClass;


    @Autowired
    public BootClass(@Qualifier(name = "dependencyClass") DependencyClass dependencyClass) {
        this.dependencyClass = dependencyClass;

    }
}

Конечно, вы можете придумать лучшее название для DependencyClass. Я бы предложил что-то вроде DatabaseConfiguration.

Это не означает, что каждый объект должен находиться под контролем фабрики компонентов или что new никогда не должен вызываться. Объекты с короткой областью видимости, которые не являются общими, безусловно, могут быть созданы.

Это объекты, требующие внедрения зависимостей, которые должны находиться под контролем фабрики компонентов.

Привет, duffymo, какая это версия Springboot? Я использую "1.4.3.RELEASE". @Qualifier (name = "") выдает ошибку. должно быть значение вместо имени? Я использовал имя dependencyClass только в качестве примера, чтобы выделить различные отношения, мне следовало бы быть более ясным

Julian 12.04.2018 11:15

Да, исправьте ошибку.

duffymo 12.04.2018 11:22

Просто отметьте это с помощью аннотации @Autowired, как показано ниже. Это подойдет.

@Autowired
private DependencyClass dependencyClass;

Это не работает без включения файла свойств зависимости, что кажется моей проблемой.

Julian 12.04.2018 11:18

Расширение ответа @duffymo:

Как только вы сделаете то, что он предложил, также убедитесь, что "jdbc.driver.class.name" и "jdbc.url" присутствуют в вашем основном файле свойств проекта. Если вы ожидаете, что эти значения будут заполнены только потому, что они у вас есть properties файла "Dependent" проекта, вы можете разочароваться. Проверьте это для более подробной информации:

https://stackoverflow.com/a/49564724/3458292

Привет, Агам, я думаю, это может быть моя проблема. Я могу получить объект зависимости с помощью «@ComponentScan», но поскольку файла свойств нет, что может привести к тому, что значения не будут заполнены. спасибо, я попробую это и доложу

Julian 12.04.2018 11:17

Другие вопросы по теме