Аннотация Value в Spring не внедряет поля java класса
Вот структура проекта:
Вот SpringConfig:
@Configuration
@ComponentScan(basePackages = {"controlers","database"} )
@EnableWebMvc
public class SpringConfig implements WebMvcConfigurer {
private final ApplicationContext ApplicationContext;
@Autowired
public SpringConfig(ApplicationContext applicationContext) {
this.ApplicationContext = applicationContext;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public SpringResourceTemplateResolver templateResolver(){
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(this.ApplicationContext);
templateResolver.setPrefix("views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setOrder(1);
templateResolver.setCheckExistence(true);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setEnableSpringELCompiler(true);
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry){
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
registry.viewResolver(resolver);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/web-interface-res/**")
.addResourceLocations("classpath:/web-interface-res/");
}
}
В папке database лежит один класс DatabaseConnection
, вот, собственно, и он:
@Component
@PropertySource("classpath:config.properties")
public class DatabaseConnection {
private Connection connection;
@Value("${db.userName}")
private String userName;
@Value("${db.userPassword}")
private String userPassword;
@Value("${db.url}")
private String dbUrl;
@Value("${db.databaseName}")
private String dbName;
public DatabaseConnection() {
try{
System.out.println(dbUrl);
this.connection = DriverManager.getConnection(this.dbUrl,this.dbName,this.userPassword);
System.out.println("Сойденение устоновлено");
}catch (SQLException e)
{
System.out.println(e.toString());
System.out.println("Ошибка сойденения с баззой данных");
}
}
}
Я пишу обычный web-сайт с БД и решил добавлять некоторые данные через проперти-файл, чтобы в будущем проект было легко поддерживать.
Но тут столкнулся с такой проблемой: в классе DatabaseConnection
поля не внедряются из файла проперти, то есть, на строчке
System.out.println(dbUrl);
в консоль выводится null
. Не могу понять, как это дело всё исправить. Если требуется дополнительная информация, то я с радостью её добавлю. Также хочу добавить, что если в классе ControlerHello
попробовать внедрить, то это получится:
@Controller
@PropertySource("classpath:config.properties")
public class ControlerHello {
@Value("${db.url}")
private String url;
@GetMapping("/hello")
public String sayHello(){
System.out.println(url);
return "hello";
}
@GetMapping("/")
public String showIndexHTML(){
return "index";
}
}
То есть, когда мы откроем представление hello
, то нам выведется на экран значение из файла проперти. Понять только не могу, почему в DatabaseConnection
-то не работает.