Spring:@PersistenceContext和@Autowired线程安全性?
基于此示例:Spring:@PersistenceContext和@Autowired线程安全性?,spring,jpa,jpa-2.0,Spring,Jpa,Jpa 2.0,基于此示例: @Service public class Purchase { @PersistenceContext private EntityManager em; @Autowired private PurchaseDAO dao; private String normalField; .... // methods, operations, etc } 如果我弄错了,请帮我纠正: 服务类PurchaseDAO和PurchaseDAO是由spring管
@Service
public class Purchase {
@PersistenceContext
private EntityManager em;
@Autowired
private PurchaseDAO dao;
private String normalField;
.... // methods, operations, etc
}
如果我弄错了,请帮我纠正:
EntityManager是一种廉价的、非线程安全的对象,对于单个业务流程、单个工作单元,应该只使用一次,然后丢弃。除非需要,否则EntityManager将无法获得JDBC连接(或数据源),因此即使您不确定服务特定请求是否需要数据访问,您也可以安全地打开和关闭EntityManager。2。拥有非final类属性不总是使类非线程安全吗?我的意思是,尽管属性类型(String)是不可变的,但属性仍然可以更改为指向不同的对象(另一个String实例)。这难道不会导致类变得完全不线程安全吗?是的,尽管这取决于成员变量(类属性)的访问、修改和使用方式,但一般来说,我想说的是,是否有可能同时从两个不同的线程修改同一个变量,或者在被另一个修改时被另一个访问,这会使类不是线程安全的。使用同步或仅读取变量(或者在本例中,字符串引用或整个字符串可以在使用前复制到类外的另一个引用),同时访问不应该引起任何问题,因此类应该是线程安全的。嘿@bertie,我使用的是
@PersistenceContext
方法。但这似乎造成了内存泄漏。因为会话不清楚。你有过类似的经历吗?@oak:对不起,我自己也不确定,因为我已经很久没有和JPA一起玩了。我建议您为您的问题和环境创建一个新的问题,在这里放置@PersistenceContext
,等等。