me han comentado mis clases con @Repository, @Resource, @Component, anotaciones @Service pero estas clases se tienen que ejecutar en 2 ambientes. El primer entorno está basado en Spring 2.x mientras que el otro no tiene ningún resorte. Estoy seguro de que el código fallará sin los jarras de resorte & Quiero saber sus ideas sobre cómo puedo conservar las anotaciones pero aún así trabajar en ambos entornosLa dependencia de las anotaciones de la primavera
Respuesta
Como no se puede eliminar un mensaje aceptado, le sugiero que lea poste/voto Hans', que es una explicación mucho mejor que mi original: Dependency on Spring's annotations
Al utilizar las anotaciones de estereotipo (@Service etc.), la compensación para obtener la validación del bean en tiempo de compilación es que usted se acopla a la biblioteca de contexto de primavera en su código. Veo 3 opciones inmediatas:
1) Eliminar las anotaciones, y configurar sus granos en XML.
2) Copie spring-context.jar (o la biblioteca equivalente que contiene las anotaciones de estereotipo) en su proyecto que no sea Spring para resolver las dependencias, pero deje Spring sin configurar para que no se use en su código.
3) Retire las anotaciones de sus clases concretas, y se extienden por versiones de "Primavera". Este enfoque puede o no puede ser un poco invasivo para su diseño, pero vale la pena considerar:
public class MyDAO {
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// .. Your DAO code resides here ..
}
y el muelle de sub-clase:
@Repository
public class MySpringDAO extends MyDAO {
@AutoWired
protected SessionFactory sessionFactory;
}
De esta manera, su proyecto no primavera puede utilizar " MyDAO ", y excluir la clase" MySpringDAO "de la compilación.
Para cada anotación en Java, hay un archivo de clase correspondiente. Si averigua qué anotaciones usa, puede copiar los archivos de clase en el otro entorno.
No estoy seguro de si estas clases dependen de otras clases aswel; probablemente no lo sean, ya que las anotaciones son objetos de datos inmutables. Si la clase también tiene métodos, puede volver a compilar (con la misma ID de serialización) las fuentes de anotación sin los métodos (es decir, solo los campos) para usar en el otro entorno.
Para poder usar las anotaciones que menciona, o realmente, deje que Spring las use por usted para que obtenga el beneficio, necesita usar al menos Spring 2.5.x, es cuando se introdujeron.
Además, no es necesario que las anotaciones estén en el classpath. Simplemente serán ignorados. Ya que cuando está utilizando la primavera 2.0 no habrá ningún código que intente 'escanear' en busca de ellos.
Aún tiene dependencias de tiempo de compilación en esas anotaciones. Y dado que sus archivos .class tienen las anotaciones compiladas, supongo que también necesitaría los archivos '.class de anotaciones en su ruta de clase. ¿No es ese el caso? –
Nope :) para verificarlo Acabo de probar. Creé un proyecto pequeño, con un main(). La clase está anotada con MyAnnotation que escribí. Lo ejecuté en la línea de comandos, luego eliminé manualmente el archivo .class para la anotación y lo ejecuté de nuevo. Aún funcionó. Pruébelo usted mismo :) Tenga en cuenta que mi anotación fue anotada en sí misma con @Retention (RetentionPolicy.RUNTIME) –
Muy bueno saber de hecho ... –
No sería primavera si te obligara a hacer que tus clases dependieran directamente de ella.
Puede definir sus propias anotaciones que sirvan para el mismo propósito que las probadas en primavera. Es decir. definir com.yourcompany .... etc Componente
Asumo que utilice un <context:component-scan .../>
en algún lugar de su configuración primavera. Simplemente agregue use-default-filters="false"
y defina su propio filtro para que coincida con sus anotaciones.
Busque los posprocesadores que realmente hacen el trabajo pesado.Se pueden configurar para utilizar un conjunto alternativo de anotaciones. @Repository
es examinado por PersistenceExceptionTranslationPostProcessor
. Este PostProcessor se puede configurar para usar su equivalente a la anotación.
- 1. Dependencia circular en la primavera
- 2. primavera Meta-Anotaciones
- 3. Inyección de dependencia de primavera: inyecte todas las instancias de la interfaz
- 4. primavera, clase abstracta y anotaciones
- 5. Seguridad de primavera: forzando https usando anotaciones?
- 6. Guardando las anotaciones de la trama
- 7. Sobre la dependencia de las macros
- 8. Alternativas a la seguridad de primavera en Java (primavera)
- 9. Anotaciones de transacciones de primavera: Ejecutar en caso de éxito
- 10. Anotaciones de seguridad de primavera con EL: ¿se necesita compilar la información de depuración?
- 11. Aplicación de consola de primavera configurada con anotaciones
- 12. primavera no se aplica el método de anotaciones de seguridad
- 13. ¿Utiliza anotaciones de primavera para aplicar automáticamente el interceptor Hibernate?
- 14. Inyectar dependencia de primavera en super clase abstracta
- 15. Creación de beans de primavera inicializados de forma diferida utilizando la configuración basada en anotaciones
- 16. Inyección de dependencia de primavera @Autocableado sin setter
- 17. ¿Qué es la Inyección de Dependencia?
- 18. Hibernar: entidades con anotaciones de primavera no escaneadas desde jar
- 19. ¿Cómo establecer la variable de entorno o la propiedad del sistema en las pruebas de primavera?
- 20. Dependencia de primavera Inyección de un aspecto anotado
- 21. ¿podemos usar expresiones de primavera (spel) en otras anotaciones?
- 22. Maven gestión de la dependencia de las dependencias de plugins
- 23. Primavera - ¿Cómo establecer las claves de enumeración en un mapa con anotaciones
- 24. ¿Cómo se excluye la dependencia de registro común de primavera con hiedra?
- 25. configuración de la aplicación (primavera?)
- 26. Dependencia de Maven dentro de la dependencia con diferente alcance
- 27. Inyectando el Inyector de Dependencia usando la Inyección de Dependencia
- 28. ¿Spring MVC admite las anotaciones JSR 311?
- 29. La inyección de dependencia y la fábrica
- 30. configuración del nivel de aislamiento en las transacciones basadas en la anotación de primavera
Elegí # 2 y funciona bien. –
Gracias Sean, es muy amable de tu parte. –