2009-12-25 6 views
2
<context:annotation-config/> 
<context:component-scan... 

Il est utilisé pour la classe que je dois annotée avec @Repository @Service @component ...comprendre les métadonnées printanières d'annotation XML?

utilisation si je dois utiliser @Configurable

<tx:annotation-driven transaction-manager="transactionManager" /> 
<context:component-scan... 

utilisation si i need @Transactional, à côté de quoi d'autres métadonnées dois-je ajouter en XML pour utiliser la gestion des transactions?

<bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

Quel est le besoin d'ajouter ceci dans le XML? dans quel but?

Répondre

4
<tx:annotation-driven transaction-manager="transactionManager" /> 

Pour vous utiliser la gestion des transactions doivent également déclarer une transactionManager à utiliser. Cette déclaration dépend de l'approche que vous utilisez pour accéder aux données. Par exemple, pour JDBC simple que vous écrivez:

<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name = "dataSource" ref = "dataSource" /> 
</bean> 

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

Cette déclaration est utilisée pour gérer @PersistenceContext et @PersistenceUnit annotations pour la configuration d'accès aux données JPA. Hovewer, support pour ces annotations également inclus dans <context:annotation-config />, donc vous n'avez pas besoin de le déclarer explicitement si vous utilisez <context:annotation-config />.

2

De spring javadoc

BeanPostProcessor qui traite des annotations PersistenceUnit et PersistenceContext, pour l'injection des ressources JPA correspondant EntityManagerFactory et EntityManager. De tels champs ou méthodes annotés dans un objet géré par Spring seront automatiquement injectés. Ce post-processeur injectera des sous-interfaces de EntityManagerFactory et EntityManager si les champs ou méthodes annotés sont déclarés comme tels. Le type réel sera vérifié tôt, à l'exception d'une référence EntityManager partagée ("transactionnelle"), où les discordances de type peuvent être détectées aussi tard que lors de la première invocation réelle.