第一步:配置实现MethodInterceptor的切面
public class OutsideInvokeLogInterceptor implements MethodInterceptor{
private static Logger log = Logger.getLogger("outsideInvoke");
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
String methodName = invocation.getMethod().toString();
Object returnValue = invocation.proceed();
if (returnValue == null) {
log.warn("调用 " + methodName + "is fail,返回的result结果为空,方法入参为:(" + parseArguments(invocation.getArguments()) + ")");
return ResultDTO.getFailureResult(BSErrorCode.INTERNAL_ERROR, BaseKeyMsgCode.RETURN_RESULTDTO_IS_NULL);
}else{
if(returnValue instanceof ResultDTO){
ResultDTO<Object> resultDTO = (ResultDTO<Object>)returnValue;
if(!resultDTO.isSuccess()){
log.warn("调用 " + methodName + " is fail ,方法入参为:(" + parseArguments(invocation.getArguments()) + ")"
+ "返回值:" +resultDTO.getCode() + "," + resultDTO.getKey());
} else{
log.info("调用 " + methodName + " is success ,方法入参为:(" + parseArguments(invocation.getArguments()) + ")");
}
}
}
return returnValue;
}
}
<bean id="outsideInvokeLogAdvice" class="com.ali.luna.commons.service.interceptor.OutsideInvokeLogInterceptor" />
第二步:配置切点
<bean id="methodPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
<property name="mappedNames">
<list>
<value>add*</value>
</list>
</property>
</bean>
第三步:配置自动代理
<bean id="outsideInvokeLogInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="methodPointcut"/>
<property name="advice" ref="outsideInvokeLogAdvice"/>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list><value>activityService</value></list>
</property>
<property name="interceptorNames">
<list>
<value>outsideInvokeLogInterceptor</value>
</list>
</property>
</bean>
分享到:
相关推荐
NULL 博文链接:https://tomboxfan.iteye.com/blog/350398
Spring实现自动代理Demo,BeanNameAutoProxyCreator的运用,学习参考原理
9.3.2 Spring的事务管理器实现类 9.3.3 事务同步管理器 9.3.4 事务传播行为 9.4 编程式的事务管理 9.5 使用XML配置声明式事务 9.5.1 一个将被实施事务增强的服务接口 9.5.2 使用原始的 TransactionProxyFactoryBean ...
9.3.2 Spring的事务管理器实现类 9.3.3 事务同步管理器 9.3.4 事务传播行为 9.4 编程式的事务管理 9.5 使用XML配置声明式事务 9.5.1 一个将被实施事务增强的服务接口 9.5.2 使用原始的 TransactionProxyFactoryBean ...
11.1.1 安全拦截器 11.1.2 认证管理器 11.1.3 访问决策管理器 11.1.4 运行身份管理器 11.2 管理身份验证 11.2.1 配置ProviderManager 11.2.2 根据数据库验证身份 11.2.3 根据LDAP...
-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <value>transactionInterceptor <!-- 此处可增加其他新的Interceptor --> <!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动...
11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 ...
本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate 3.1 的... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢
本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate ... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢 4/4
本程序是struts spring hibernate的完整环境配置, 包括: struts1.3 spring 2.0 hibernate ... BeanNameAutoProxyCreator事务处理 中文乱码解决 MD5程序加密 AJAX验证码等 希望大家喜欢 3/4
BeanNameAutoProxyCreator DefaultAdvisorAutoProxyCreator <br> 持久层 来看看 Spring 的 IoC 容器与 AOP 框架如何应用于持久层,包括了资料库、交易等相关议题。 资料库存取 Spring ...
Spring 的配置文件:..........................................................................................................7 1.3.4 在配置中配置类:........................................................
nested exception is java.lang.AbstractMethodError: org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator.postProcessAfterInstantiation(Ljava/lang/Object;Ljava/lang/String;)Z at org....
BeanNameAutoProxyCreator BeanNameAware BeanNameUrlHandlerMapping BeanNameViewResolver BeanNotOfRequiredTypeException BeanPostProcessor BeanPropertyBindingResult BeanPropertySqlParameterSource ...
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................