`
Josh_Persistence
  • 浏览: 1650009 次
  • 性别: 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);
	}

}

 

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

 

 

分享到:
评论

相关推荐

    拦截器与冲突解决

    1. **配置顺序**:Spring MVC按照注册拦截器的顺序执行它们,如果`&lt;mvc:annotation-driven /&gt;`配置在拦截器之后,那么可能会导致拦截器无法正常工作,因为Spring可能已经处理了请求,而没有交给拦截器。 2. **命名...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...

    springboot+aspect实现springaop拦截指定方法.zip

    SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...

    Flex-Spring拦截器

    当我们在Flex-Spring集成中使用拦截器时,我们需要配置Spring的`HandlerInterceptor`或`WebBindingInitializer`接口,这些拦截器会在请求被处理前或处理后执行特定的代码。例如,我们可以通过以下步骤设置拦截器: ...

    springboot spring aop 拦截器注解方式实现脱敏

    在Spring AOP中,我们可以定义一个`@Aspect`类,这个类包含若干个`@Before`,`@After`,`@Around`等注解的方法,这些方法会在相应的切点(pointcut)执行前、后或周围执行。在数据脱敏的场景下,我们可能需要在响应...

    struts2整合spring实现拦截器

    在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    MyBatis拦截器是一种插件机制,允许我们在SQL执行前或执行后添加自定义行为。通过实现Interceptor接口并覆写intercept方法,我们可以拦截特定的SqlSession方法,如execute、insert、update、select等。在分页场景中...

    Spring扫描器—spring组件扫描使用详解

    它会遍历指定包及其子包下的所有类,寻找带有特定注解(如@Service、@Component、@Repository、@Controller等)的类,并将这些类实例化为Spring容器中的bean。通过这种方式,我们可以避免手动编写大量的XML配置,...

    spring boot 登录拦截器

    本篇文章将深入探讨如何使用Spring Boot、JPA连接数据库以及设置登录拦截器来拦截指定路径。 首先,我们需要理解Spring Boot中的JPA(Java Persistence API)是如何连接到数据库的。JPA是Java EE的一部分,提供了一...

    spring-boot添加 拦截器

    本篇文章将详细探讨如何在Spring Boot中添加和使用拦截器来实现登录拦截。 首先,我们需要了解Spring Boot中的拦截器是如何工作的。在Spring MVC框架中,拦截器是基于AOP(面向切面编程)的概念实现的。我们可以...

    详解spring boot容器加载完后执行特定操作

    "Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...

    java + spring boot +jpa 拦截器分库分表demo

    它涵盖了从JPA的基本使用到AOP拦截器的实现,再到分库分表策略的设计,对于提升大型项目的数据库性能有着重要的参考价值。开发者可以根据自身的业务场景,调整和优化这个示例,以满足特定的需求。

    Spring拦截器,高级参数绑定

    在Spring框架中,拦截器(Interceptor)是一种强大的...在实际开发中,可以利用Spring的拦截器实现诸如权限控制、日志记录等功能,而高级参数绑定和灵活的Controller返回值处理则极大地提高了开发效率和代码的可读性。

    使用CGLIB模拟spring的拦截器

    在`intercept`方法中,我们实现了类似Spring拦截器的功能,调用`preHandle`和`postHandle`方法,并根据`preHandle`的结果决定是否执行目标方法。 最后,`afterCompletion`方法的调用通常需要手动管理,因为它涉及到...

    spring MVC(新增拦截器demo)

    在本次的“spring MVC(新增拦截器demo)”项目中,我们将重点探讨如何在Spring MVC中添加拦截器来实现对请求的预处理和后处理。 拦截器在Spring MVC中扮演着关键的角色,它们可以用来执行一些全局性的任务,如日志...

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringBoot的拦截器

    1. 创建自定义拦截器类:你需要创建一个实现了`HandlerInterceptor`接口的类,这个接口包含三个方法:`preHandle()`, `postHandle()`, 和 `afterCompletion()`。这些方法会在请求生命周期的不同阶段被调用。 ```...

    springmvc(spring4版本)+自带登录和拦截器

    6. **拦截器**:Spring MVC的拦截器允许我们在请求被处理之前或之后执行自定义逻辑。在登录系统中,拦截器常用于检查请求是否来自已登录用户,如果未登录,可能会重定向到登录页面。 7. **视图解析器**:Spring MVC...

    CXF3.0+Spring3.2 自定义拦截器

    2. **自定义拦截器实现**:你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口来自定义拦截器。`Phase`接口定义了拦截器执行的阶段,如PRE_INVOKE、POST_INVOCATION等。每个拦截...

    spring配置JSON拦截器VIEW

    拦截器的主要方法包括preHandle、postHandle和afterCompletion,分别在请求处理前、处理后以及整个请求完成后的不同阶段执行。 配置JSON拦截器通常涉及到以下几个步骤: 1. **创建拦截器类**:首先,我们需要创建...

Global site tag (gtag.js) - Google Analytics