В моем загрузочном приложении 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;
}
Спасибо,
Юлиан




Это классическая ошибка новичков 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 никогда не должен вызываться. Объекты с короткой областью видимости, которые не являются общими, безусловно, могут быть созданы.
Это объекты, требующие внедрения зависимостей, которые должны находиться под контролем фабрики компонентов.
Да, исправьте ошибку.
Просто отметьте это с помощью аннотации @Autowired, как показано ниже. Это подойдет.
@Autowired
private DependencyClass dependencyClass;
Это не работает без включения файла свойств зависимости, что кажется моей проблемой.
Расширение ответа @duffymo:
Как только вы сделаете то, что он предложил, также убедитесь, что "jdbc.driver.class.name" и "jdbc.url" присутствуют в вашем основном файле свойств проекта. Если вы ожидаете, что эти значения будут заполнены только потому, что они у вас есть properties файла "Dependent" проекта, вы можете разочароваться. Проверьте это для более подробной информации:
https://stackoverflow.com/a/49564724/3458292
Привет, Агам, я думаю, это может быть моя проблема. Я могу получить объект зависимости с помощью «@ComponentScan», но поскольку файла свойств нет, что может привести к тому, что значения не будут заполнены. спасибо, я попробую это и доложу
Привет, duffymo, какая это версия Springboot? Я использую "1.4.3.RELEASE". @Qualifier (name = "") выдает ошибку. должно быть значение вместо имени? Я использовал имя dependencyClass только в качестве примера, чтобы выделить различные отношения, мне следовало бы быть более ясным