AOP编程实例:拦截拦截某个实现类的⽅法第⼀步:配置实现MethodInterceptor的切⾯
java代码
1public class OutsideInvokeLogInterceptor implements MethodInterceptor{
2private static Logger log = Logger("outsideInvoke");
3
4 @Override
5public Object invoke(MethodInvocation invocation) throws Throwable {
6 String methodName = Method().toString();
7 Object returnValue = invocation.proceed();
8if (returnValue == null) {
9 log.warn("调⽤ " + methodName + "is fail,返回的result结果为空,⽅法⼊参为:(" + Arguments()) + ")");
FailureResult(BSErrorCode.INTERNAL_ERROR, BaseKeyMsgCode.RETURN_RESULTDTO_IS_NULL);
11 }else{
12if(returnValue instanceof ResultDTO){
spring aop应用场景13 ResultDTO<Object> resultDTO = (ResultDTO<Object>)returnValue;
14if(!resultDTO.isSuccess()){
15 log.warn("调⽤ " + methodName + " is fail ,⽅法⼊参为:(" + Arguments()) + ")"
16 + "返回值:" +Code() + "," + Key());
17 } else{
18 log.info("调⽤ " + methodName + " is success ,⽅法⼊参为:(" + Arguments()) + ")");
19 }
20 }
21 }
22return returnValue;
23
24 }
25 }
View Code
1<bean id="outsideInvokeLogAdvice" class="com.ali.lunamons.service.interceptor.OutsideInvokeLogInterceptor"/>
View Code
配置切点:
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>
View Code
配置⾃动代理:
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>
View Code
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论