2013-02-13 51 views
0

我正在試驗舊的Petclinic示例,並且我注意到SimpleJdbcClinic中的獸醫ArrayList存在於會話的整個生命週期中。它似乎應該只存在於請求中,因爲我沒有看到任何註釋將其放入會話上下文中。有人能指出我不明白的嗎?在舊的Petclinic示例中使用會話

這裏是獸醫類: @XmlRootElement 公共類獸醫{

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); 
    } 

一旦獸醫列表被創建它存活多個請求。

感謝

回答

1

我認爲它避免了存儲在private final List<Vet> vets所有獸醫冗餘數據庫調用。另外vets變量是單身人士的財產@Service SimpleJdbcClinic

+0

是的,但不是SimpleJdbcClinic請求範圍? – Dave 2013-02-13 00:58:34

+0

默認範圍是Singleton。 http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-scopes – Alex 2013-02-13 01:08:31

+0

我相信它也應該是單例。 – Alex 2013-02-13 01:16:20