2011-04-21 6 views
6

Si quiero declarar un grano mediante la configuración basada en Java de Primavera de 3, yo puedo hacer esto:Usando @ traducción excepción de estilo Repositorio de primavera configuración de Java

@Configuration 
public class MyConfiguration { 
    @Bean 
    public MyRepository myRepository() { 
     return new MyJpaRepository(); 
    } 
} 

Pero, ya que no puedo utilizar el @Repository anotación en este contexto, ¿cómo hace que Spring realice una traducción de excepción?

+0

¿Por qué no puedes usar '@ Repository'? ¿Podría usar una anotación diferente en su lugar? – skaffman

+0

Porque eso crearía el componente del escáner de anotación de Spring, no de mi clase de configuración. – hertzsprung

+0

@hertzspring: En ese caso, reconfigure el escáner para que no recoja su clase. El escáner puede recibir reglas de inclusión/exclusión. – skaffman

Respuesta

4

declarar una clase MyJpaRepository como repositorio:

@Repository 
public class MyJpaRepository { 
    ... 
} 

Y asegúrese de que tiene sus anotaciones se pueden descubrir mediante la creación del elemento componente de exploración en la configuración de la primavera:

<context:component-scan base-package="org.example.repository"/> 

ya que haces no desea que su repositorio esté incluido en el análisis de anotación según sus comentarios, filtúelo excluyendo todas las anotaciones de @Repository o su (s) clase (s) o paquete en particular. Hay un ejemplo de esto en la documentación:

<context:component-scan base-package="org.example.repository"> 
    <!-- use one or the other of these excludes, or both if you *really* want to --> 
    <context:exclude-filter type="regex" expression="*Repository"/> 
    <context:exclude-filter type="annotation" 
          expression="org.springframework.stereotype.Repository"/> 
</context:component-scan> 

El Spring 3.0 documentation describe esta configuración en más detalle en la sección 3.10.

Al configurar su clase como Repositorio, se designará como uno solo cuando la saque como un Bean en su clase de Configuración.

+0

Sí, parece que 'PersistenceExceptionTranslationPostProcessor' encontrará los beans configurados en Java así como los configurados en anotaciones. Terminé usando mi propia anotación personalizada, '@ JavaConfiguredRepository', y agregué otra PersistenceExceptionTranslationPostProcessor y anulé su propiedad repositoryAnnotationType. – hertzsprung

Cuestiones relacionadas