В настоящее время я использую шаблоны JDBC для извлечения данных из базы данных.Для этого я создал «статический» класс репозитория (т. Е. Класс, помеченный как «конечный» и с одним закрытым конструктором).В нем я пытаюсь установить значения двух закрытых статических переменных класса PlatformTransactionManager
.
Однако мой IntelliJ говорит мне, что значения переменных класса всегда равны нулю, и я понятия не имею, какрешить эту проблему.
Я надеялся просто использовать их в качестве локальных переменных в статическом конструкторе, поскольку мне действительно нужны константы JdbcTemplate, которые я подготовлю с использованием PTM.Поскольку я не знаю, как это сделать, я попытался сделать их в private static final
полях.Но IntelliJ этого тоже не допустил.
Чтобы попытаться решить эту проблему, я рассмотрел следующие темы:
.,,а также это примечание по классификаторам:
Важные примечания:
- В проекте, над которым я работаю, нет файлов конфигурации XML.В проекте есть [*] файлы конфигурации, которые обрабатывают конфигурации.
- Еще одна вещь, на которую следует обратить внимание, это то, что я не совсем понимаю аннотации в целом (будь то в Java, C # и т. Д.).То есть я знаю основную идею, стоящую за ними, но я понятия не имею, как они на самом деле работают.,,и я больше не помню большую часть среды Spring (поскольку я работаю над Core Java и C # .NET уже довольно давно).Так .,,Буду признателен за помощь в решении этой проблемы.
Ниже приведен пример того, как выглядит мой исходный код:
private final class Repository {
private Repository() {}
private static final JdbcTemplate TEMPLATE1;
private static final JdbcTemplate TEMPLATE2;
@Qualifier( "transactionManager1" )
private static PlatformTransactionManager manager1;
@Qualifier( "transactionManager2" )
private static PlatformTransactionManager manager2;
static {
// NOTE: For this one, IntelliJ shows me an error stating, "Value 'manager1'
// is always 'null'."
DataSource source =
( ( JpaTransactionManager ) manager1 ).getDataSource();
TEMPLATE1 = new JdbcTemplate( source );
// NOTE: Here, there is no error ... at least, IntelliJ isn't showing any.
source = ( ( JpaTransactionManager ) manager2 ).getDataSource();
TEMPLATE2 = new JdbcTemplate( source );
}
public Map<String, Object> fetchData() {
return TEMPLATE1.queryForList( "..." ); // TODO: something
}
}