Возможно ли инициализировать источник данных перед вызовом конструктора компонента. Как я могу делать запросы SQL сразу после инициализации bean-компонента.
Это невозможно. Ресурсы зависимости могут быть введены только после создания экземпляра . Не имея конкретного экземпляра, просто ничего , куда ресурсы могут быть внедрены.
Чтобы выполнить действия непосредственно после внедрения зависимости, была изобретена аннотация @PostConstruct
. Вам нужно использовать его вместо конструктора.
Заменить
public Dashboard() throws SQLException {
initSettings();
}
public void initSettings() throws SQLException {
// ...
}
от
@PostConstruct
public void initSettings() throws SQLException {
// ...
}
Метод, отмеченный @PostConstruct
, вызывается непосредственно после внедрения зависимости, как это было сделано @Resource
, @Inject
, @EJB
, @ManagedProperty
и т. Д.
Не связано с конкретной проблемой, способ, которым вы получаете доступ к значению карты с помощью дополнительного метода, излишне усложняется. Просто получите для него простой метод получения
public Map<String, String> getSettings() {
return settingsMap;
}
и получите доступ к значениям карты следующим образом:
#{DashboardController.settings['SessionTTL']}
или когда ключ карты не содержит точек:
#{DashboardController.settings.SessionTTL}
Смотри также:
Кстати, запуск имен экземпляров в верхнем регистре, например #{DashboardController}
, а не в нижнем регистре, например #{dashboardController}
(или просто по умолчанию #{dashboard}
), также является плохим соглашением по кодированию.