2014-01-21 2 views
0

У меня есть сервисный компонент, способный получать/устанавливать значения свойств из постоянного уровня (например: база данных). Что-то вроде этого:Spring MVC: глобально впрыскивающие свойства из постоянного слоя

@Service 
public ConfigService { 
    public String getConfig(String key); 
} 

Задача для каждого класса контроллера я пишу я должен autowire и заполнить мою модель с ключевым свойством/значений:

@Controller 
@RequestMapping("/foo") 
public FooController { 
    @Autowired private ConfigService configService; 

    @RequestMapping("/login") 
    public String login(Model model) { 
    model.addAttribute("site.name", configService.getConfig("site.name")); 
    //... 
    } 
} 

Есть ли способ, что я могу автоматически получать значение этого свойства на моем весеннем JSP-представлении? Я не хочу прикладывать это к моему объекту модели для каждого класса контроллера, который я пишу.

Ближайший я могу до сих пор использовать Spring ResourceBundleMessageSource bean и <spring:message> теги, однако я ограничен использованием файла свойств, не могу сохранить его в базе данных.

+0

Я не уверен в теге Spring JSP Spring, но я знаю, что шаблоны Thymeleaf могут извлекать любой Spring-компонент по имени (например, 'configService.config ['site.name']'. – chrylis

ответ

0

Я нашел другой способ сделать это. Используйте класс @ControllerAdvice в сочетании с методом @ModelAttribute. Что-то вроде этого:

@ControllerAdvice 
public class ConfigAdvice { 
    @Autowired private ConfigService configService; 

    @ModelAttribute 
    public void populateConfig(Model model) { 
    for(Config config : configService.getAll()) { 
     model.addAttribute(config.getKey(), config.getValue()); 
    } 
    } 
} 

Метод @ModelAttribute аннотированный populateConfig() выше будет работать до любого @RequestMapping метода на всех других классов контроллеров.

Один недостаток - это ключ конфигурации, который не может содержать символов точек.

Пока это выглядит как мой лучший вариант. Пожалуйста, дайте мне знать, если есть лучший способ.

Смежные вопросы