第一步:配置实现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>
分享到:
相关推荐
`BeanNameAutoProxyCreator`是Spring AOP实现中的一种代理创建器,它根据bean的名称来决定是否对bean进行代理处理。在本篇文章中,我们将深入探讨`BeanNameAutoProxyCreator`的使用方法及其背后的原理。 首先,`...
通过定义接口、实现接口、创建拦截器和配置 Spring,我们可以灵活地控制方法调用的生命周期,添加诸如日志记录、权限检查等预处理或后处理逻辑。这种面向切面的编程方式使代码更加模块化,提高了代码的可复用性和可...
拦截器是实现自动代理逻辑的关键,它定义了在目标方法执行前后需要执行的操作。通常,我们创建一个实现了`MethodInterceptor`接口的类,然后在`interceptorNames`中引用它。 3. **代理过程** 当Spring容器启动并...
1. 通过 Bean 的名称自动创建代理,实现类 BeanNameAutoProxyCreator 2. 根据 Bean 中的 AspectJ 注解自动创建代理,实现类 AnnotationAwareAspectJAutoProxyCreator 3. 根据 Advisor 的匹配机制自动创建代理,实现...
当调用这些bean的方法时,实际上是调用了事务拦截器,后者根据配置的事务属性来决定是否开启新的事务、事务何时提交或回滚等。 ### 总结 Spring 1.2中的声明式事务管理提供了一种简洁、高效的方式来管理事务。通过...
这里,`autoProxyCreator`将对所有名称匹配`*Service`的bean创建代理,将事务拦截器`hibernateTransactionInterceptor`和`jdbcTransactionInterceptor`应用于这些服务类的方法上,从而实现了透明的事务管理。...
这意味着不仅可以控制用户能否访问某个方法,还能指定用户在访问该方法时可以执行哪些操作。 #### SkyonFramework对Acegi的扩展 SkyonFramework通过一系列扩展组件增强了Acegi的安全功能,具体包括: - **...
在Spring框架中,代理机制主要用于实现AOP(面向切面编程)功能,通过动态创建代理对象来拦截目标方法调用,从而实现如事务管理、日志记录、性能监控等横切关注点。 ### 1. ProxyFactoryBean `ProxyFactoryBean`是...
1. **接口实现**:`DataSourceSpyInterceptor`实现了`MethodInterceptor`接口,这意味着它可以通过AOP(面向切面编程)的方式对方法调用进行拦截。 2. **RdbmsSpecifics**:该类封装了特定数据库的元数据信息,如...
`TransactionInterceptor`是Spring提供的事务拦截器,它可以捕获方法调用并在方法执行前后插入事务管理代码。通过配置`TransactionInterceptor`,我们可以控制哪些方法需要进行事务管理,以及具体的事务属性。 5. ...
在这篇文章中,我们将探讨使用Spring_Hibernate框架实现声明式事务配置的方法,具体来说,就是使用TransactionInterceptor来管理事务。在Spring框架中,事务管理器是核心组件之一,它负责管理事务的生命周期,包括...
校验器功能通过validate方法或XML配置进行数据验证,拦截器则在请求处理过程中起到增强和过滤的作用,通过在struts.xml中配置。国际化支持通过struts.properties和相应的语言文件实现,确保多语言环境下的应用体验。...
Acegi Security通过ConfigAttribute接口及其实现类SecurityConfig来表示这些配置参数,使得安全策略能够细化到每一个具体的请求上。 Acegi Security的强大之处在于其高度的定制性和灵活性,能够根据应用程序的具体...
1. 基于Bean配置名规则的自动代理生成器:BeanNameAutoProxyCreator是这种类型的实现类,它允许为一组特定配置名的Bean自动创建代理实例。 2. 基于Advisor匹配机制的自动代理创建器:...
-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 --> <value>transactionInterceptor ``` #### 五、总结 通过本文的介绍,我们可以看到Spring框架中事务传播行为的多样性及其在实际应用中的重要性...
Acegi通过Spring特有的Bean Context、拦截器和面向接口的编程模式,简化了复杂安全需求的实现。 **安全性**这一概念在Acegi中主要分为两大方面——**认证**与**授权**。认证确保用户身份的真实性,即验证用户是否如...
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 ...
-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <value>transactionInterceptor <!-- 此处可增加其他新的Interceptor --> <!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动...