用Spring调用AUTOWIRED对象的方法的性能

时间:2014-08-13 06:59:06

标签: spring-mvc autowired

我正在使用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,对于你们中的一些人来说这可能是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:1)

自动装配仅在应用程序启动时发生一次,因此不会直接影响性能。

然而,Spring可能会为您调用@Autowired bean(或任何其他Spring bean)添加某些功能,例如:启动/停止可能对方法调用产生性能影响的DB事务,但另一方面,这是理想的行为。而且与业务逻辑(例如,DB调用)相比,开销通常非常小。

因此,我不太关心bean调用的开销,只关注你想要实现的目标。例如。如果我想在一个事务中保存所有对象(当使用正确的@Transactional注释时),或者如果我想在每个自己的事务中保存所有对象(例如我想保存所有可能的东西),我更喜欢案例1错误处理)