Spring AOP y AspectJ

Usualmente cuando empezamos un proyecto con Spring no tomamos mucha importancia a la librería que utilizaremos, debido a que la suite de Spring provee por defecto su propia implementación (Spring AOP), la cual es facil de adoptar y nos brinda solución a los problemas mas comunes relacionados con la programación orientada a aspectos.

Todo va excelente en el proyecto, hasta que por requerimientos del negocio necesitamos crear aspectos propios para tareas específicas, y empezamos a tener ciertos problemas, como la no ejecución de los aspectos sobre métodos anidados, y nos preguntamos si estamos haciendo algo mal en nuestro código o en una configuración, pues no es así, los aspectos de Spring no funcionan sobre métodos anidados debido a que su implementación hace uso de proxies y cuando llamamos a métodos dentro de la misma clase estos proxies no son usados, ello quiere decir que los aspectos solo funcionan sobre métodos que son invocados desde otros objetos que también son administrados por Spring.

Estas situaciones permiten que los desarrolladores encuentren soluciones creativas, como mover los métodos observados a otro beans para que funcionen sus aspectos.

Tal vez al inicio no lo notemos, pero a la larga esto generará que la responsabilidad que se había definido inicialmente en un bean se encuentre dispersa en diversos beans para solucionar la limitación de Spring AOP

Si revisamos Spring AOP a más detalle nos daremos con la sorpresa que la implementación de Spring es solo una solución simple y de fácil entendimiento para solucionar los problemas más comunes; aquí es donde AspectJ entra en el juego.

A diferencia de Spring AOP, AspectJ provee la solución completa de AOP haciéndola más compleja pero a su vez más potente y robusta.

Mientras más revisamos las bondades de AspectJ notamos más deficiencias de Spring AOP como que solo funciona para un tipo de joinpoint (“method execution”), también que no es aplicable sobre clases y métodos declarados como final, entre otros.

A continuación listamos las principales diferencias entre ambas implementaciones.

Spring AOP

  • Funciona solo sobre los beans gestionados por Spring.
  • Funciona solo sobre métodos.
  • No necesita un proceso de compilación separado para los aspectos.
  • Más lento debido a que el weaving sucede en tiempo de ejecución.

AspectJ

  • Funciona sobre todo el dominio.
  • Funciona sobre métodos, atributos, constructores, inicializadores estáticos, etc.
  • Según su configuración podría necesitar el compilador de AspectJ (ajc).
  • Mejor rendimiento debido a que el weaving puede darse en tiempo de compilación o ejecución de acuerdo a su configuración.

Entonces si todo es tan bueno con AspectJ, ¿por qué no lo usamos desde el principio?, como se mencionó anteriormente, es un poco más complejo trabajar con Aspectj y según la configuración que tengamos puede o no usar un compilador adicional para los aspectos.

Con el análisis realizado no estamos sugiriendo que la implementación de Spring sea mala, ya que es una muy buena herramienta que funciona correctamente y está enfocado en los problemas más comunes que solemos tener en los proyectos, pero si necesitamos algo más complejo para nuestro proyecto deberíamos revisar a más detalle AspectJ.

Siguiendo con el tema de aspectos, el equipo ha creado otro artículo interesante donde vemos AspectJ en acción.

Articulos Relacionados

Leave a comment

Tu dirección de correo electrónico no será publicada.

slot gacorslot gacorMurah4dtotoslot88Horas88Slot PulsaSlot DanaSpboNowSkorWomen In The WorldSlot88rubiesandradishesorganicnewsroomvirante seocloud spectatorVainglory Forumamerican gathering of jewish holocaust survivorsRumah Pejuang Kanker Ambuoutside foundWetpaintcwhonorsSlot GacorJudi BolaDemo SlotDemo SlotSlot GacorSlot GacorJudi BolaJudi Bolaomo77omo77omo777omo777UnogoalSPBOATLASBET88CUANWIN138MACANASIA88https://direct.lc.chat/14614518/https://secure.livechatinc.com/licence/14614518/v2/open_chat.cgihttps://direct.lc.chat/15014550/https://secure.livechatinc.com/licence/15014550/v2/open_chat.cgihttps://direct.lc.chat/15314022/https://secure.livechatinc.com/licence/15314022/v2/open_chat.cgihttps://ibrapchs.net/https://atox.in/
https://slot77.amikmahaputra.ac.id/products/slot77/https://gacor4d.amikmahaputra.ac.id/products/gacor4d/https://infini88.amikmahaputra.ac.id/products/infini88/https://sv388.amikmahaputra.ac.id/products/sv388/https://pay4d.amikmahaputra.ac.id/products/pay4d/https://parlay-bola.amikmahaputra.ac.id/products/mix-parlay/https://idn-slot.amikmahaputra.ac.id/products/idn-slot/https://mpo-slot.amikmahaputra.ac.id/products/mpo-slot/https://nexus-slot.amikmahaputra.ac.id/products/nexus-slot/https://mahjong-ways.amikmahaputra.ac.id/products/slot-mahjong/https://akun-pro-jepang.amikmahaputra.ac.id/products/slot-jepang/https://akun-pro-kamboja.amikmahaputra.ac.id/products/slot-kamboja/https://akun-pro-malaysia.amikmahaputra.ac.id/products/slot-malaysia/https://akun-pro-myanmar.amikmahaputra.ac.id/products/slot-myanmar/https://akun-pro-rusia.amikmahaputra.ac.id/products/slot-rusia/https://akun-pro-singapore.amikmahaputra.ac.id/products/slot-singapore/https://akun-pro-taiwan.amikmahaputra.ac.id/products/slot-taiwan/https://akun-pro-thailand.amikmahaputra.ac.id/products/slot-thailand/https://akun-pro-thailand.amikmahaputra.ac.id/products/slot-thailand/https://akun-pro-vietnam.amikmahaputra.ac.id/products/slot-vietnam/
https://slot-bonus.amikmahaputra.ac.id/products/slot-bonus/https://slot-demo.amikmahaputra.ac.id/products/slot-demo/https://slot-dana.amikmahaputra.ac.id/products/slot-dana/https://slot-depo-10k.amikmahaputra.ac.id/products/slot-10k/https://slot-depo-25k.amikmahaputra.ac.id/products/slot-25k/https://slot-garansi-kekalahan.amikmahaputra.ac.id/products/slot-garansi-kekalahan/https://slot-habanero.amikmahaputra.ac.id/products/slot-habanero/https://slot-hoki.amikmahaputra.ac.id/products/slot-hoki/https://slot-jp.amikmahaputra.ac.id/products/slot-jp/https://slot-maxwin.amikmahaputra.ac.id/products/slot-maxwin/https://bocoran-admin-slot.amikmahaputra.ac.id/products/bocoran-admin-slot/https://casino-online.amikmahaputra.ac.id/products/casino-online/https://bet88.amikmahaputra.ac.id/products/bet88/https://bandarqq.amikmahaputra.ac.id/products/bandarqq/https://baccarat-online.amikmahaputra.ac.id/products/baccarat-online/https://asia88.amikmahaputra.ac.id/products/asia88/https://asia4d.amikmahaputra.ac.id/products/asia4d/https://anti-rungkad.amikmahaputra.ac.id/products/anti-rungkad/https://akun-vip.amikmahaputra.ac.id/products/akun-vip/https://akun-gacor.amikmahaputra.ac.id/products/akun-gacor/
https://slot-receh.journal.poltekanika.ac.id/products/slot-receh/https://slot-pulsa.journal.poltekanika.ac.id/products/slot-depo-pulsa/https://slot-maxwin.journal.poltekanika.ac.id/products/slot-maxwin/https://slot-hoki.journal.poltekanika.ac.id/products/slot-hoki/https://slot-garansi-kekalahan.journal.poltekanika.ac.id/products/slot-garansi-kekalahan/https://slot-depo-25k.journal.poltekanika.ac.id/products/slot-25k/https://slot-depo-10k.journal.poltekanika.ac.id/products/slot-10k/https://slot-demo.journal.poltekanika.ac.id/products/slot-demo/https://slot-dana.journal.poltekanika.ac.id/products/slot-depo-dana/https://slot-bonus.journal.poltekanika.ac.id/products/bonus-new-member/
https://www.angkolabarat.tapselkab.go.id/products/slot-zeus/https://www.angkolabarat.tapselkab.go.id/products/slot-10k/https://www.angkolabarat.tapselkab.go.id/products/slot-25k/https://www.angkolabarat.tapselkab.go.id/products/slot-garansi-kekalahan/https://www.angkolabarat.tapselkab.go.id/products/slot-hoki/https://www.angkolabarat.tapselkab.go.id/products/slot-maxwin/https://www.angkolabarat.tapselkab.go.id/products/slot-pulsa/https://www.angkolabarat.tapselkab.go.id/products/slot-receh/https://www.angkolabarat.tapselkab.go.id/products/slot-toto/https://www.angkolabarat.tapselkab.go.id/products/slot-demo/>
https://www.jurnal.poltekanika.ac.id/products/asia4d/https://www.jurnal.poltekanika.ac.id/products/bet88/https://www.jurnal.poltekanika.ac.id/products/idn-slot/https://www.jurnal.poltekanika.ac.id/products/mpo-slot/https://www.jurnal.poltekanika.ac.id/products/nexus-slot/https://www.jurnal.poltekanika.ac.id/products/pay4d/https://www.jurnal.poltekanika.ac.id/products/sbobet88/https://www.jurnal.poltekanika.ac.id/products/slot77/https://www.jurnal.poltekanika.ac.id/products/slot88/https://www.jurnal.poltekanika.ac.id/products/sv388/
https://slot-bonus.pn-subang.go.id/products/bonus-new-member/https://slot-dana.pn-subang.go.id/products/slot-dana/https://slot-demo.pn-subang.go.id/products/slot-demo/https://slot-garansi-kekalahan.pn-subang.go.id/products/slot-garansi-kekalahan/https://slot-hoki.pn-subang.go.id/products/slot-hoki/https://slot-maxwin.pn-subang.go.id/products/slot-maxwin/https://slot-pulsa.pn-subang.go.id/products/slot-pulsa/https://slot-receh.pn-subang.go.id/products/slot-receh/https://slot-toto.pn-subang.go.id/products/slot-toto/https://slot-zeus.pn-subang.go.id/products/slot-zeus/https://unogoal.pn-subang.go.id/products/unogoal/https://toto-togel.pn-subang.go.id/products/toto-togel/https://spbo.pn-subang.go.id/products/spbo/https://pkv-games.pn-subang.go.id/products/pkv-games/https://parlay-bola.pn-subang.go.id/products/parlay-bola/https://nowgoal.pn-subang.go.id/products/nowgoal/https://judi-bola.pn-subang.go.id/products/judi-bola/https://idn-poker.pn-subang.go.id/products/idn-poker/https://dominoqq.pn-subang.go.id/products/dominoqq/https://bet88.pn-subang.go.id/products/bet88/
https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/link-gacor/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/link-demo/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/situs-thailand/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/situs-kamboja/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/sbobet/https://sdi.babelprov.go.id/publikasi/link-demo/https://sdi.babelprov.go.id/publikasi/situs-thailand/https://sdi.babelprov.go.id/publikasi/situs-kamboja/https://sdi.babelprov.go.id/publikasi/sbobet88/https://akun-pro-hongkong.amikmahaputra.ac.id/products/slot-hongkong/