在旧的Petclinic示例中使用会话

时间:2013-02-13 00:33:39

标签: spring spring-mvc

我正在尝试使用旧的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列表,它就可以存活多个请求。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为通过将所有兽医存储在private final List<Vet> vets中来避免冗余数据库调用。此外,vets变量是单身@Service SimpleJdbcClinic

的属性