`
Josh_Persistence
  • 浏览: 1657671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Spring实现指定执行某些类后的方法后再去执行某个特定的方法 - 前/后增强拦截器

阅读更多

问题需求: 在执行系统中的某些方法后(如执行类名包含有Controller关键字的类中的方法后,再去执行打印某短信息的方法)。

 

解决办法<->: 

 


一、在Spring的配置文件中配置名为BeanNameAutoProxyCreator的interceptor

<bean id="accessAdvisor" class="com.wsheng.uiservices.advisors.RestAPIAccessAdvisor" />
 
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
         	<list>

                        <value>*RestAPI</value>
         		<value>*Controller</value> 
         	</list>
         </property>
        <property name="interceptorNames">
            <list>
                <value>accessAdvisor</value>
            </list>
        </property>
    </bean>

 

 

 

二、创建类RestAPIAccessAdvisor并实现接口:AfterReturningAdvice

这样当调用完*Controller.java或者是*RestAPI.java这样的类中的方法后,将会执行其中的afterRutrning()方法,

public void afterReturning(Object returnValue, Method method,
			Object[] params, Object target) throws Throwable {
		
		try {
			String methodName = method.getName();

                        // 在这里执行相应的逻辑
			System.out.println(methodName);
		} catch (Exception e) {
	logger.error("Building Rest API Access Metrics Failure!!!", e);
		}
		
	}

 

 解决办法<二>

 

一、同样在spring的配置文件中启动Spring的MVC配置。

<mvc:annotation-driven>
<context:component-scan base-package="com.chuanliu.platform.activity"/>

 

二、配置相关的Interceptor类并制定interceptor的url

<mvc:interceptors>
   <mvc:interceptor>
<mvc:mapping path="/rest/relation/contacts/add/*"/>
<bean class="com.chuanliu.platform.activity.basic.advisor.ActionAdvisor"/>      </mvc:interceptor>
</mvc:interceptors>

 

三、完成ActionAdvisor类

/**
 * 
 */
package com.chuanliu.platform.activity.basic.advisor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

/**
 * @author Josh Wang(Sheng)
 *
 * @email  josh_wang23@hotmail.com
 */
@Component("actionAdvisor")
public class ActionAdvisor extends HandlerInterceptorAdapter {

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println(" ---- afterCompletion");
		super.afterCompletion(request, response, handler, ex);
		
	}

	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		// TODO Auto-generated method stub
		System.out.println(" --- afterCOncurrentHandlingStarted");
		super.afterConcurrentHandlingStarted(request, response, handler);
		
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println(" --- postHandle");
		System.out.println("=== " + request.getRequestURL());
		System.out.println(" === " + response.getStatus());
		super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		// TODO Auto-generated method stub
		System.out.println(" --- preHandle");
		System.out.println("--- " + request.getRequestURL());
		return super.preHandle(request, response, handler);
	}

}

 

执行测试会发现前拦截器中复写的方法都被执行了。

 

 

分享到:
评论

相关推荐

    java之spring mvc之拦截器.docx

    每个请求都会按照配置的顺序通过这些拦截器,直到某个拦截器返回`false`,或者所有拦截器都返回`true`并执行完控制器方法。 6. **与过滤器(Filter)的区别** 虽然拦截器和过滤器都能在请求处理过程中插入自定义...

    \\(^_^)/ 模拟Struts2的AOP实现 (转)

    例如,你可以配置只对特定Action或Action的某些方法应用拦截器。 4. **实战示例**: - 创建一个简单的日志拦截器,记录Action执行前后的信息。 - 配置拦截器栈,将日志拦截器添加到默认栈或者只对特定Action生效...

    Spring源码解析

    在Spring AOP中,拦截器是一种特殊的Advice,它可以在方法调用前后执行某些操作。Spring AOP通过拦截器链的方式,实现了对多个切面的调用顺序的控制。 - **MethodBeforeAdvice**:前置通知接口,表示在方法调用之前...

    Spring的批处理框架

    开发者可以通过实现拦截器来监控Job的执行流程,并在必要时对其进行干预。 **4.1.3 Inheriting from a Parent Job** Spring Batch支持Job继承机制,子Job可以从父Job中继承已定义的Step,从而减少重复代码。 **...

    spring 帮助文档

    Spring AOP实现了基于代理(proxy-based)的AOP机制,通过代理对象拦截目标对象的方法调用并执行额外的逻辑。 **3.1.2 Spring AOP基础概念** Spring AOP的核心概念包括切面(aspect)、连接点(join point)、通知...

    Acegi_使用.doc

    - **AccessDecisionManager**:决定用户是否有权限执行某个特定操作。 - **RunAsManager**:在执行特定操作时,根据需要替换当前的Authentication对象。 - **SecureObject拦截器**:协调AuthenticationManager、...

    个人整理的3年以上JAVA开发面试资料

    6. **拦截器**:Spring MVC支持在请求处理过程中使用拦截器(Interceptor)来实现某些功能,例如权限验证、日志记录等。拦截器可以通过实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`类来定义,...

Global site tag (gtag.js) - Google Analytics