tutorial que journaldev baeldung java spring java-ee aop

que - ¿Cuál es su "mejor práctica" para el primer proyecto de Java EE Spring?



spring aop interceptor (11)

Actualmente estoy tratando de entrar en el desarrollo de Java EE con el marco de Spring. Como soy nuevo en Spring, es difícil imaginar cómo debe comenzar un buen proyecto en marcha.

¿Tiene alguna de las mejores prácticas , consejos o principales DO NOT para un principiante? ¿Cómo comenzó con Spring - proyecto grande o pequeñas aplicaciones tipo tutorial? ¿Qué tecnología usaste de inmediato? AOP, complejo Hibernate ...


"... ¿Qué tecnología usaste de inmediato? AOP, complejo Hibernate ..." - Diría que una mejor pregunta sería preguntar qué es lo que la gente no usó de inmediato. Agregaría los ejemplos que cites a esa lista.

Las plantillas Spring MVC y JDBC serían mis recomendaciones iniciales. Puedes recorrer un largo camino solo con eso.

Mi recomendación sería seguir fielmente las recomendaciones arquitectónicas de Spring. Usa sus ideas de capas. Asegúrese de que su capa web sea completamente separable del resto. Para ello, permite que el nivel web interactúe con el back-end solo a través de la capa de servicio.

Si desea reutilizar esa capa de servicio, una buena recomendación es exponerla utilizando los servicios web Spring "contract first". Si comienza con los mensajes XML que pasa de ida y vuelta, su cliente y servidor pueden estar completamente desacoplados.

El IDE con el mejor soporte de Spring es IntelliJ. Vale la pena gastar unos pocos dólares.


Aunque han pasado años desde que utilicé la primavera, y no puedo decir que soy fanático, sé que la herramienta App Fuse ( https://java.net/projects/appfuse/ ) ha sido útil para ayudar a las personas arranque en términos de generar todos los artefactos que necesita para ponerse en marcha.


Comience aquí - De hecho, creo que es uno de los mejores libros de Software Dev que he leído.
Expert Spring MVC y flujo web

Aprende la nueva configuración basada en anotaciones para las clases de MVC. Esto es parte de Spring 2.5. El uso de clases basadas en anotaciones hará que la escritura de unidades sea mucho más fácil. También es bueno reducir la cantidad de XML.

Oh sí, Pruebas unitarias: si usas Spring, MEJOR ser Unit Testing. :) Escribe pruebas unitarias para todas tus clases web y de capa de servicio.

Lea sobre el diseño impulsado por el dominio. El hecho de que pueda usar clases de objetos de dominio en todos los niveles de una aplicación de Spring significa que va a tener un modelo de dominio MUY potente. Aprovecharlo.

Sin embargo, al usar las clases de objeto de dominio para la población de formularios, querrá tener en cuenta las preocupaciones de seguridad recientes en torno a Spring Framework. Una discusión en el lado del servidor revela la forma de cerrar el agujero en los comentarios.


Con el lanzamiento de Spring 2.5 y 3.0, creo que una de las mejores prácticas más importantes para aprovechar ahora son las anotaciones de Spring. Las anotaciones para Controladores, Servicios y Repositorios pueden ahorrarle mucho tiempo, le permiten enfocarse en la lógica de negocios de su aplicación y potencialmente pueden hacer que todos sus objetos sean simples objetos antiguos de Java (POJO).


Consejo pequeño: me ha resultado útil modularizar y etiquetar claramente mis archivos de contexto Spring xml en función de la preocupación de la aplicación. Aquí hay un ejemplo de una aplicación web en la que trabajé:

  • MyProject / src / main / resources / spring /
    • datasource.xml - Mi único bean fuente de datos.
    • persistence.xml - Mis DAO / Repositorios. Depende de los beans datasource.xml .
    • services.xml - Implementaciones de capa de servicio. Estos suelen ser los beans a los que les aplico la transaccionalidad usando AOP. Depende de persistence.xml beans persistence.xml .
    • controladores.xml - Controladores My Spring MVC. Depende de los beans services.xml .
    • views.xml - Implementaciones de mi vista.

Esta lista no es perfecta ni exhaustiva, pero espero que ilustre el punto. Elija la estrategia de nomenclatura y granularidad que mejor funcione para usted.

En mi experiencia (limitada), he visto este enfoque con los siguientes beneficios:

Una arquitectura más clara

Los archivos de contexto claramente nombrados ofrecen a quienes no están familiarizados con la estructura de su proyecto un lugar razonable para comenzar a buscar definiciones de beans. Puede hacer que la detección de dependencias circulares / no deseadas sea un poco más fácil.

Ayuda al diseño del dominio

Si desea agregar una definición de bean, pero no encaja bien en ninguno de sus archivos de contexto, ¿tal vez surja un nuevo concepto o preocupación? Ejemplos:

  • Supongamos que desea hacer que su capa de servicio sea transaccional con AOP. ¿Agrega esas definiciones de beans a services.xml , o las pone en su propia transactionPolicy.xml ? Habla con tu equipo. ¿Debe su política de transacciones ser conectable?
  • Agregue beans Acegi / Spring Security a su archivo controllers.xml , o cree un archivo de contexto security.xml ? ¿Tiene diferentes requisitos de seguridad para diferentes implementaciones / entornos?

Pruebas de integración

Puede conectar un subconjunto de su aplicación para pruebas de integración (por ejemplo: dados los archivos anteriores, para probar la base de datos que necesita para crear solo beans datasource.xml y persistence.xml ).

Específicamente, puede anotar una clase de prueba de integración como tal:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

Funciona bien con Spring Beans Graph de IDE

Tener muchos archivos de contexto enfocados y bien nombrados hace que sea fácil crear BeansConfigSets personalizados para visualizar las capas de su aplicación usando el Gráfico Beans de Spring IDE. Lo he usado antes para dar a los nuevos miembros del equipo una descripción general de alto nivel de la organización de nuestra aplicación.


De hecho, me gustó Spring. Era una brisa fresca de aire en tu J2EE Java Beans promedio.

Recomiendo implementar el ejemplo que Spring proporciona:

http://static.springframework.org/docs/Spring-MVC-step-by-step/

Además, decidí usar Monty completa y agregué Hibernate a mi aplicación Spring;), porque Spring brinda un excelente soporte para Hibernate ... :)

Sin embargo, tengo un NO, que aprendí de la peor manera (producto en producción) ... Si solo implementa la interfaz del Controlador y devuelve un objeto ModelAndView con algunos datos proporcionados con la interfaz, Spring gardamge los recopila recursos, para tratar de almacenar esos datos en caché. Por lo tanto, tenga cuidado de poner datos grandes en esos objetos ModelAndView, ya que encerrarán la memoria de su servidor mientras el servidor esté en el aire tan pronto como se haya visto esa página ...


Enfócate primero en el corazón de Spring: Dependency Injection. Una vez que veas todas las formas en que se puede usar DI, entonces comienza a pensar en las piezas más interesantes como AOP, Remoting, Plantillas JDBC, etc. Así que mi mejor consejo es permitir que tu uso de Spring crezca desde el núcleo.

¿Mejores prácticas? Si está utilizando la configuración XML estándar, administre el tamaño de los archivos individuales y coméntelos juiciosamente. Puede pensar que usted y otros comprenderán perfectamente sus definiciones de beans, pero en la práctica son un poco más difíciles de recuperar que el simple código antiguo de Java.

¡Buena suerte!


Primero que nada, Spring se trata de la modularidad y funciona mejor si uno se enfoca en escribir componentes pequeños que hacen una cosa y lo hacen bien.

Si sigues las mejores prácticas en general, como:

  • Definir una interfaz en lugar de clases abstractas
  • Hacer tipos inmutables
  • Mantenga las dependencias lo menos posible para una sola clase.
  • Cada clase debería hacer una cosa y hacerlo bien. Las grandes clases monolíticas apestan, son difíciles de probar y difíciles de usar.

Si sus componentes son pequeños y siguen los dogmas anteriores, deberían ser fáciles de cablear y jugar con otras cosas. Los puntos anteriores también son válidos, naturalmente, para el marco Spring en sí mismo.

PD

No escuches los puntos anteriores, están hablando de cómo hacer lo que sea. Es más importante aprender a pensar que a hacer algo. Los humanos pueden pensar, repetir que algo no es inteligente, pensar es.


Si solo quieres explorar un poco y ver si te gusta, te recomiendo comenzar con la capa DAO, usando Spring''s JDBC y / o Hibernate. Esto lo expondrá a muchos de los conceptos básicos, pero hágalo de una forma que sea fácil de aislar del resto de su aplicación. Esta es la ruta que seguí, y fue un buen calentamiento antes de comenzar a construir una aplicación completa con Spring.


Spring también trata mucho de las pruebas unitarias y, por lo tanto, de la capacidad de prueba de tus clases. Eso básicamente significa pensar en la modularización, la separación de preocupaciones, hacer referencia a una clase a través de interfaces, etc.


Una buena forma de comenzar es concentrarse en el "Marco de primavera". La cartera de Spring se ha convertido en una gran cantidad de proyectos en torno a diversos aspectos del software empresarial. Permanece en el núcleo al principio y trata de captar los conceptos. Download los últimos archivos binarios y echa un vistazo al ejemplo de Petclinic de Spring una vez que estés familiarizado con el núcleo. Proporciona una buena visión general de los diversos proyectos que SpringSource tiene para ofrecer.

Aunque la documentación es muy buena, recomendaría un libro después de comprender los conceptos básicos. Lo que he encontrado problemático con la documentación, es que no está en profundidad y no puedo darle todos los detalles que necesita.