SuppeJ describe tangente y mejora a través de anotaciones.
1 Requisitos de entorno de desarrollo
Debido a que desea usar anotaciones, asegúrese de usar Java 5.0 y superior.
Introducir la biblioteca de clases relacionada con SuppeJ:
<Spendency> <MoupRoD> org.spectj </groupid> <artifactid> spightJrt </artifactid> <versions> $ {spightJ.version} </versever> </dependency> <epardency> <proupid> org.aspectj </groupId> <artifactid> AspectJweVer </artifactid> <Persion> $ {SuppeJ.Version} </versewer> </pendency> <epardency> <MoupRid> org.aspectj </proupid> <artifactid> aspectojTools </arfactid> <versión> $ {aspectoj.version} </versión> </dependency> <spendency> <uproupid> org.aspectj </proupid> <artifactid> <versión> $ {spightJ.version} </verversion> </pendency> <epardency> <grupoD> aOpAlliance </groupId> <artifactId> aopalliance </arfactid> <versión> $ {aOpAlliance.version} </versión> </dependencia> 2 métodos de programación
@Aspecto // identificar facetas
Public Class PrerENteSpect {/*** Lógica mejorada*/@before ("ejecución (* rent (..))") // Definir tipos de tangentes y mejoras public void begererent () {System.out.println ("Iniciar ejecución de acciones de alquiler"); }}Esta sección es solo un POJO ordinario, pero se agrega la anotación @Aspect.
@Before("execution(* rent(..))") significa que el tipo @Before es una mejora precedida, y su contenido es una expresión de corte de punto @Aspectj. Aquí significa que la mejora se teje en el método de renta () de la clase de destino. Rent () puede contener cualquier parámetro entrante y cualquier valor de retorno.
¿No es muy conveniente para una clase con @Aspect para integrar el punto tangente, el tipo de mejora y la lógica transversal mejorada a través de la anotación y el código? O (∩_∩) o jaja ~
Pruebas unitarias:
SuppeJProxyFactory Factory = new SuppeJProxyFactory (); // Establezca la clase de destino Factory.setTarget (new User ()); // Agregar la clase FACET Factory.AdDaspect (prerenteSpect.class); user proxy = factory.getProxy (); string userId = "001"; proxy.rent (userid); proxy.back (usuarios ();
Resultado de salida:
--Star la acción de alquiler-
Usuario: Alquiler [Banco de energía]
Usuario: Retorno [Banco de energía]
3 Método de configuración
<!-clase de destino-> <bean id = "user"/> <!-class face-> <bean/> <!-crea automáticamente agente-> <bean/>
Pruebas unitarias:
ApplicationContext context = new ClassPathXMLApPlicationContext (Spring.xml "); usuario user = (usuario) context.getBean (" user "); string userId =" 001 "; user.rent (userId); user.back (userId);La salida es exactamente la misma que el programa.
También se puede configurar en función del espacio de nombres AOP de Schema:
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: aop = "http://www.springframework.org/schema/aop" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/speans/spring-beans-4. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-spightj unidad-> <aop: sightj-autoproxy/> <!-Target class-> <bean id =" user "/> <! <Bean/> </rips>
Esta configuración es más simple. De hecho, el modo de proxy automático se ha adoptado dentro de <aop:aspectj-atuoproxy/> o (∩_∩) o jaja ~
proxy-target-class de <aop:aspectj-atuoproxy/> es falso de forma predeterminada, lo que indica que la mejora se teje utilizando la tecnología proxy dinámica JDK; Si este valor es verdadero, indica que la mejora se teje utilizando la tecnología proxy dinámica CGLIB. Si la clase de destino no declara la interfaz, incluso si la proxy-target-class se establece en falso, el yo o (∩__ ∩) o jaja ~
Para los proyectos basados en Java 5.0+, se recomienda utilizar SuppeJ para configurar el corte de puntos y la mejora, porque esto es más simple y más directo.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.