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);
}
一旦獸醫列表被創建它存活多個請求。
感謝
是的,但不是SimpleJdbcClinic請求範圍? – Dave 2013-02-13 00:58:34
默認範圍是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
我相信它也應該是單例。 – Alex 2013-02-13 01:16:20