了解spring xml注释元数据?

时间:2009-12-25 14:40:41

标签: java spring transactions annotations

<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中添加它?为了什么目的?

2 个答案:

答案 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)

来自spring javadoc

BeanPostProcessor,用于处理PersistenceUnit和PersistenceContext注释,用于注入相应的JPA资源EntityManagerFactory和EntityManager。将自动注入任何Spring管理对象中的任何此类带注释的字段或方法。
如果注释的字段或方法如此声明,则此后处理器将注入EntityManagerFactory和EntityManager的子接口。实际类型将尽早验证,但共享(“事务性”)EntityManager引用除外,其中可能在第一次实际调用时检测到类型不匹配。