BeanNameAutoProxyCreator拦截器

BeanNameAutoProxyCreator拦截器拦截某个实现类方法的步骤

第一步:配置实现MethodInterceptor的切面

Java代码   收藏代码
  1. public class OutsideInvokeLogInterceptor implements MethodInterceptor{  
  2.     private static Logger log = Logger.getLogger("outsideInvoke");  
  3.     
  4.     @Override  
  5.     public Object invoke(MethodInvocation invocation) throws Throwable {  
  6.         String methodName = invocation.getMethod().toString();  
  7.         Object returnValue = invocation.proceed();  
  8.         if (returnValue == null) {  
  9.             log.warn("调用 " + methodName + "is fail,返回的result结果为空,方法入参为:(" + parseArguments(invocation.getArguments()) + ")");  
  10.             return ResultDTO.getFailureResult(BSErrorCode.INTERNAL_ERROR, BaseKeyMsgCode.RETURN_RESULTDTO_IS_NULL);  
  11.         }else{  
  12.             if(returnValue instanceof ResultDTO){  
  13.                 ResultDTO<Object> resultDTO = (ResultDTO<Object>)returnValue;  
  14.                 if(!resultDTO.isSuccess()){  
  15.                     log.warn("调用 " + methodName + " is fail ,方法入参为:(" + parseArguments(invocation.getArguments()) + ")"  
  16.                          + "返回值:" +resultDTO.getCode() + "," + resultDTO.getKey());  
  17.                 } else{  
  18.                     log.info("调用 " + methodName + " is success ,方法入参为:(" + parseArguments(invocation.getArguments()) + ")");  
  19.                 }  
  20.             }  
  21.         }  
  22.         return returnValue;  
  23.   
  24.     }  
  25. }  
 

 

 

Xml代码   收藏代码
  1. <bean id="outsideInvokeLogAdvice" class="com.ali.luna.commons.service.interceptor.OutsideInvokeLogInterceptor" />  

 

第二步:配置切点


Xml代码   收藏代码
  1. <bean id="methodPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">  
  2.         <property name="mappedNames">  
  3.             <list>  
  4.                 <value>add*</value>  
  5.             </list>  
  6.         </property>  
  7.     </bean>  

 

第三步:配置自动代理

Xml代码   收藏代码
  1. <bean id="outsideInvokeLogInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">  
  2.     <property name="pointcut" ref="methodPointcut"/>  
  3.     <property name="advice" ref="outsideInvokeLogAdvice"/>  
  4. </bean>  
  5. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  6.     <property name="beanNames">  
  7.         <list><value>activityService</value></list>  
  8.     </property>  
  9.     <property name="interceptorNames">  
  10.         <list>  
  11.             <value>outsideInvokeLogInterceptor</value>  
  12.         </list>  
  13.     </property>  
  14. </bean>  


BeanNameAutoProxyCreator拦截某一系列类的所有方法

配置文件内容:

<!-- 配置EDI异常捕获切入 -->
<bean id="exceptionHandler" class="com.sinosure.sol.service.edi.monitor.EdiExceptionHandler" >
<property name="ediMonitorMailService" ref="ediMonitorMailService" />
</bean>
<bean id="proxyCreator"  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>ediDomQuotaApplyService,ediNoLcQuotaApplyService,ediContractApplyInfoService</value>
</property>
<property name="interceptorNames">
<list>
<value>exceptionHandler</value>
</list>
</property>
</bean>


拦截处理类EdiExceptionHandler:
public class EdiExceptionHandler implements ThrowsAdvice {
private EdiMonitorMailService ediMonitorMailService;
public EdiMonitorMailService getEdiMonitorMailService() {
return ediMonitorMailService;
}
public void setEdiMonitorMailService(EdiMonitorMailService ediMonitorMailService) {
this.ediMonitorMailService = ediMonitorMailService;
}

public void afterThrowing(Method method, Object[] args, Object target, Throwable throwable) throws Throwable{
StringBuffer str = new StringBuffer();
str.append("发生异常的方法名称:  " + method.getName()+";");
str.append("发生异常的代理对象:  " + target.toString()+";");
for(int i=0;i<args.length;i++){
if(args[i].getClass().getSimpleName().equals("HashMap")){
HashMap map = (HashMap)args[i];
str.append("发生异常的交易ID为:" + map.get("editimer_exceptionDataid")+";");
str.append("发生异常的交易客户clientno为:" + map.get("editimer_exceptionClientid")+";");
str.append("发生异常的交易客户rclientno为:" + map.get("editimer_exceptionRClientid")+";");
}
        }
Exception ex = new Exception(throwable);
        str.append("发生的异常描述:  " + ex.getCause()+";");
        str.append("异常的详细信息:  " +";");
        for(StackTraceElement se : throwable.getStackTrace()){
         str.append(se.toString() +";");
        }
        ediMonitorMailService.sendMailPlainContent("EDI Timer Exception", str.toString());
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值