为了更清楚地说明我是如何解决这个问题的,我选择回答我自己的问题。
1.正如 DigitalJoel 的回答中所建议的,我创建了一个 ApplicationListener bean。每次刷新上下文时都会触发此侦听器。
LookupLoader.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.tothought.entities.SkillCategory;
import org.tothought.repositories.SkillCategoryRepository;
public class LookupLoader implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
SkillCategoryRepository repository;
private List<SkillCategory> categories;
public List<SkillCategory> getCategories() {
return categories;
}
public void setCategories(List<SkillCategory> categories) {
this.categories = categories;
}
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(this.categories == null){
this.setCategories(repository.findAll());
}
}
}
2。接下来,我在我的应用程序配置中注册了这个 bean。
application-context.xml (Spring-Config)
<bean id="lookupLoader"
class="org.tothought.controllers.initializers.LookupLoader" />
3。然后为了将这个 bean 放入每个请求中,我创建了一个 HandlerInterceptorAdapter,它在每次收到请求时执行。在这个 bean 中,我自动装配了 LookupLoader 并在请求中设置了我的列表。
LookupHandlerInterceptor.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.tothought.controllers.initializers.LookupLoader;
public class LookupHandlerInterceptor extends HandlerInterceptorAdapter {
@Autowired
LookupLoader loader;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("skillCategories", loader.getCategories());
return super.preHandle(request, response, handler);
}
}
4.在 Spring MVC Web 应用配置中注册 HandlerInterceptor
servlet-context.xml
<!-- Intercept request to blog to add paging params -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.tothought.controllers.interceptors.LookupHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
5.通过 JSP & JSTL 访问列表
<c:forEach var="category" items="${skillCategories}">
${category.name}
</c:forEach>