我正在尝试使用旧的Petclinic示例,我注意到SimpleJdbcClinic中的vets ArrayList在会话的生命周期中存在。看起来它应该只存在于请求中,因为我没有看到任何注释将它放入会话上下文中。有人能指出我无法理解的内容吗?
这是兽医类: @XmlRootElement 公共类Vets {
private List<Vet> vets;
@XmlElement
public List<Vet> getVetList() {
if (vets == null) {
vets = new ArrayList<Vet>();
}
return vets;
}
}
服务:
@Service
@ManagedResource("petclinic:type=Clinic")
public class SimpleJdbcClinic implements Clinic, SimpleJdbcClinicMBean {
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcInsert insertOwner;
private SimpleJdbcInsert insertPet;
private SimpleJdbcInsert insertVisit;
private final List<Vet> vets = new ArrayList<Vet>();
:
:
@Transactional(readOnly = true)
public Collection<Vet> getVets() throws DataAccessException {
synchronized (this.vets) {
if (this.vets.isEmpty()) {
refreshVetsCache();
}
return this.vets;
}
}
}
控制器映射:
@RequestMapping("/vets")
public ModelMap vetsHandler() {
Vets vets = new Vets();
vets.getVetList().addAll(this.clinic.getVets());
return new ModelMap(vets);
}
一旦创建了vets列表,它就可以存活多个请求。
谢谢
答案 0 :(得分:1)
我认为通过将所有兽医存储在private final List<Vet> vets
中来避免冗余数据库调用。此外,vets
变量是单身@Service SimpleJdbcClinic