我正在使用Spring 3.2和JPA 2.我在编写用于在列表中持久化对象的代码时遇到了疑问。这可能非常简单。
我从服务层的控制器接收对象列表,我想将它们保存在数据库中。
在案例1中,我在dao层中迭代列表并持久化对象,在案例2中,我在服务层中迭代列表并每次调用dao的方法来持久化对象。
在这里,我想问一下是否存在与AUTOWIRED对象上的多次调用相关的性能问题。
Case 1
@Service
class C1 {
@Autowired
SomeDAO dao;
public void someMethod(List<SomeObject> list) {
dao.save(list);
}
}
@Repository
class C2 {
@PersistenceContext
EntityManager entityManager;
public void save(List<SomeObject> list) {
for(SomeObject obj : list) {
entityManager.persist(obj);
}
}
}
CASE 2
@Service
class C1 {
@Autowired
SomeDAO dao;
public void someMethod(List<SomeObject> list) {
for(SomeObject obj : list) {
dao.save(obj);
}
}
}
@Repository
class C2 {
@PersistenceContext
EntityManager entityManager;
public void save(SomeObject obj) {
entityManager.persist(obj);
}
}
注意:我还在学习SPRING,对于你们中的一些人来说这可能是一个愚蠢的问题。
答案 0 :(得分:1)
自动装配仅在应用程序启动时发生一次,因此不会直接影响性能。
然而,Spring可能会为您调用@Autowired bean(或任何其他Spring bean)添加某些功能,例如:启动/停止可能对方法调用产生性能影响的DB事务,但另一方面,这是理想的行为。而且与业务逻辑(例如,DB调用)相比,开销通常非常小。
因此,我不太关心bean调用的开销,只关注你想要实现的目标。例如。如果我想在一个事务中保存所有对象(当使用正确的@Transactional注释时),或者如果我想在每个自己的事务中保存所有对象(例如我想保存所有可能的东西),我更喜欢案例1错误处理)