Spring框架AOP简单使用

AOP面向切面编程,相比于面向对象,可以进一步消除公共的代码逻辑,向原有的各业务中加入公共切面的逻辑功能称之为增强.
通过面向切面模式,将公共逻辑增强给各个业务模块,可以不改变原有业务模块的代码,只通过外部配置来实现
增强可以分为前置增强,后置增强,环绕增强,异常抛出增强等

  1. 首先要在beans中加入AOP命名空间,并导入相关jar包
  2. 编写增强类
//@Aspect
public class Log4j {
	//@Before(value="execution(* entity.*.*(..))")
    public void before(JoinPoint jp){
    	
    	System.out.println("经过前置方法!!!");
    	System.out.println("类名:"+jp.getThis()+"方法:"+jp.getSignature().getName()+"参数:"+Arrays.toString(jp.getArgs()));
        System.out.println("================================================");
    }
	//@AfterReturning(pointcut="execution(* entity.*.*(..))",returning="obj")
    public void after(JoinPoint jp,Object obj){
    	System.out.println("经过后置方法");
    	System.out.println("类名:"+jp.getThis()+"方法:"+jp.getSignature().getName()+"参数:"+Arrays.toString(jp.getArgs())+"返回值:"+obj);
    	 System.out.println("================================================");
    }
	//@AfterThrowing(pointcut="execution(* entity.*.*(..))",throwing="ex")
	public void thro (Exception ex){
    	System.out.println("经过异常处理方法");
    	try {
			
		} catch (Exception e) {
			ex.initCause(e);
		}
    	
    	System.out.println("异常:"+ex);
    	 System.out.println("================================================");
    }
	
	
	//@Around(value="execution(* entity.*.*(..))")
    public Object around(ProceedingJoinPoint jp){
    	System.out.println("经过环绕前置方法!!!");
//    	System.out.println("类名:"+jp.getThis()+"方法:"+jp.getSignature().getName()+"参数:"+Arrays.toString(jp.getArgs()));
        System.out.println("================================================");   
    	try {
		Object	obj=jp.proceed();
		 System.out.println("经过环绕后置方法");
//	    	System.out.println("类名:"+jp.getThis()+"方法:"+jp.getSignature().getName()+"参数:"+Arrays.toString(jp.getArgs())+"返回值:"+obj);
	    	System.out.println("================================================");
	    	return obj;
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
    }
}

  1. 配置xml文件,如果只用注解则在Spring配置的xml中添加 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    将增强类配置到Spring容器中
    <bean name="Log4j" class="aop.Log4j" ></bean>
<aop:config>
     <aop:aspect ref="Log4j">
     <!--编写切入点,*为通配符,第一个*为返回值类型,第二个*为包下的某个类,第三个*表示类中的某个方法 (..)中..表示参数任意-->
      <aop:pointcut expression="execution(* entity.*.*(..))" id="pt"></aop:pointcut>
      <!--前置增强-->
      <aop:before method="before" pointcut-ref="pt"></aop:before>
       <!--后置增强-->
      <aop:after-returning method="after" pointcut-ref="pt" returning="obj"></aop:after-returning>
       <!--异常抛出增强,此增强只能记录出现的异常不能处理异常-->
      <aop:after-throwing method="thro" pointcut-ref="pt" throwing="ex"/>
       <!--环绕增强-->
      <aop:around method="around" pointcut-ref="pt"/>
      </aop:aspect>  
    </aop:config> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值