AOP-aspectJ implementa notificación previa, notificación posterior, notificación envolvente y transferencia de parámetros

applicationContext.xml

		<aop:config>
	        <aop:aspect ref="myadvice">
	        	<aop:pointcut id="mypoint" expression="execution(* cn.wit.test.Demo.Demo1())" />
	        	<aop:before method="mybefore" pointcut-ref="mypoint"/>
	        	<aop:after method="myafter" pointcut-ref="mypoint"/>
	        	<aop:after-returning method="afterreturn" pointcut-ref="mypoint"/>
	        	<aop:around method="myarround" pointcut-ref="mypoint"/>
	        </aop:aspect>
        </aop:config>
        
        <bean id="demo" class="cn.wit.test.Demo"></bean>

mi consejo

  • La diferencia entre la etiqueta after y la etiqueta afterreturning es que la notificación posterior se ejecutará si el after es anormal.
  • El método correspondiente a la etiqueta afterreturning no se ejecutará si hay una excepción
public class MyAdvice {
    
    
	public void mybefore(){
    
    
		System.out.println("前置");
	}
	public void myafter(){
    
    
		System.out.println("后置");
	}
	public void  afterreturn(){
    
    
		System.out.println("后置returning");
	}
	public Object  myarround(ProceedingJoinPoint p) throws Throwable{
    
    
		System.out.println("环绕-前置");
		Object result = p.proceed();
		System.out.println("环绕-后置");
		return result;
	}
}

prueba

Inserte la descripción de la imagen aquí

Transferencia de parámetros

  • En comparación con los parámetros basados ​​en esquemas, AspectJ es mucho más problemático para transferir parámetros.
  • Hay una notificación previa a continuación, el método demo1 tiene dos parámetros: int y string

applicationContext.xml

  • Los parámetros en args (int id1, String name1) provienen del método pointcut (int id, String name), y el número, tipo y orden de los parámetros deben ser consistentes
  • El parámetro después de args, el tipo de parámetro y el nombre de parámetro de arg-names (int id1, String name1) deben ser coherentes
  • Los parámetros en advice (int id2, String name2) deben ser consistentes con el número, tipo y orden de los parámetros arg-names
<bean id="myadvice" class="cn.wit.advice.MyAdvice"></bean>
        
        <aop:config>
	        <aop:aspect ref="myadvice">
	        	<aop:pointcut id="mypoint" expression="execution(* cn.wit.test.Demo.Demo1(int,String)) and args(id1,name1)" />
	        	<aop:before method="mybefore" pointcut-ref="mypoint" arg-names="id1,name1"/>
	        </aop:aspect>
        </aop:config>
        
        <bean id="demo" class="cn.wit.test.Demo"></bean>

mi consejo

public class MyAdvice {
    
    
	public void mybefore(int id2,String name2){
    
    
		System.out.println("前置"+id2+name2);
	}
}


prueba

public class Test {
    
    
	public static void main(String[] args) {
    
    
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		Demo demo = ac.getBean("demo",Demo.class);
		try {
    
    
			demo.Demo1(1,"张三");
		} catch (Exception e) {
    
    
		} 
	}
}

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/WA_MC/article/details/112568523
Recomendado
Clasificación