initcomponents error java dependency-injection annotations

java - error - Ejecutar código antes y después del método?



initcomponents() error en java (4)

En la capa de servicio, tengo clases que se parecen a las siguientes:

class MyService { public doSomething() { TelnetSession session = new TelnetSession(); session.open("username", "password"); session.execute("blah"); session.close(); } }

En muchas clases tengo que declarar y abrir sesión y luego al final cerrarla. Prefiero hacer algo con anotaciones, pero no tengo idea de por dónde empezar. ¿Cómo hacen otras personas algo como esto?

class MyService { @TelnetTransaction public doSomething() { session.execute("blah"); } }

donde un método anotado con @TelnetTransaction instancia, abre y pasa en el objeto TelnetSession .

Gracias,

James


A menos que esté haciendo algo sobrio, quiere terminar con un objeto que delegue en un objeto de servicio, con la ejecución alrededor. No hay ninguna razón para que ambos tipos implementen exactamente la misma interfaz, y buenas razones por las que no deberían. Hay varias maneras de terminar con esto:

  • Solo hazlo a mano. Sugiero comenzar siempre así antes de llegar a la generación de código.
  • Use un proxy dinámico Desafortunadamente java.lang.reflect.Proxy requiere que agregue una interfaz.
  • Use APT (o al menos las facilidades de procesamiento de anotaciones en 1.6 javac) para generar el código. La fuente de Java es más fácil que bytecode, pero no conozco ninguna buena biblioteca para la generación de código fuente de Java.
  • Utilice el modismo Ejecutar Alrededor a mano: prolijo y torpe.

Antes y después es para qué sirve la programación orientada a aspectos.

Spring maneja transacciones con aspectos. Dale un vistazo a Spring AOP o AspectJ.


Como Duffymo dice, AOP es el camino a seguir. Sugeriría que obtuvieras una copia de

AspectJ en acción

Está escrito por Ramnivas Laddad, un Comprador de Primavera, y cubre tanto Spring AOP como el AspectJ "real" de manera exhaustiva y comprensible.

Para el desarrollo debe usar AspectJ Developer Tools para Eclipse o mejor aún, SpringSource Tool Suite (contiene AJDT).


Spring AOP será tu mejor apuesta si ya estás usando eso. Si necesita inyección en tiempo de ejecución, debería usar AspectJ. Recuerdo haber leído que Spring no es compatible con ese tipo de inyección