<context:annotation-config/>
<context:component-scan...
这用于我需要使用@Repository @Service @Component ...
注释的类 <context:spring-configured />
<context:component-scan...
如果我需要使用@Configurable
,请使用 <tx:annotation-driven transaction-manager="transactionManager" />
<context:component-scan...
如果我需要@Transactional,除此之外我需要在xml中添加其他元数据才能使用事务管理吗?
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
有什么需要在xml中添加它?为了什么目的?
答案 0 :(得分:4)
<tx:annotation-driven transaction-manager="transactionManager" />
为了使用事务管理,您还需要声明要使用的 transactionManager 。该声明取决于您用于访问数据的方法。例如,对于普通JDBC,您可以编写:
<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name = "dataSource" ref = "dataSource" />
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
此声明用于处理JPA数据访问配置的 @PersistenceContext 和 @PersistenceUnit 注释。 Hovewer,对此注释的支持也包含在<context:annotation-config />
中,因此如果您使用<context:annotation-config />
,则无需明确声明。
答案 1 :(得分:2)
BeanPostProcessor,用于处理PersistenceUnit和PersistenceContext注释,用于注入相应的JPA资源EntityManagerFactory和EntityManager。将自动注入任何Spring管理对象中的任何此类带注释的字段或方法。
如果注释的字段或方法如此声明,则此后处理器将注入EntityManagerFactory和EntityManager的子接口。实际类型将尽早验证,但共享(“事务性”)EntityManager引用除外,其中可能在第一次实际调用时检测到类型不匹配。