我有一个服务bean,能够从持久层获取/设置属性值(例如:数据库)。像这样:
@Service
public ConfigService {
public String getConfig(String key);
}
问题在于我写的每个控制器类,我必须自动装配并用属性键/值填充我的模型:
@Controller
@RequestMapping("/foo")
public FooController {
@Autowired private ConfigService configService;
@RequestMapping("/login")
public String login(Model model) {
model.addAttribute("site.name", configService.getConfig("site.name"));
//...
}
}
有没有什么方法可以在我的spring JSP视图中自动获取此属性的值?对于我编写的每个控制器类,我不想将其注入我的模型对象。
我到目前为止最接近的是使用Spring ResourceBundleMessageSource bean和<spring:message>
标签,但是我被限制使用属性文件,无法将其存储在数据库中。
答案 0 :(得分: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
方法之前运行。
一个缺点是配置密钥不能包含任何点字符。
到目前为止,这似乎是我最好的选择。如果有更好的方法,请告诉我。