`

SpringMVC杂记(十五) spring-mvc controller 的切面

阅读更多
SpringMVC杂记(十五) spring-mvc controller 的切面

一)对一般Spring上下文管理的bean,配合切面表达式都可以对其做拦截操作,原理是Spring在启动的时候,利用字节码技术生成了其子类,
这样就把切面逻辑“织入”到bean之中了。这个用spring的人一般都懂。但是很多人发现,spring-mvc使用起来,controller的代码不能通过这种
方式自己织入逻辑。
Spring MVC在启动的时候会根据处理器策略加载handler映射到一个map中,
这个时候因为配置的原因它从容器中取到的对象是原生对象,而不是我们代理的对象;所以不管我们的Controller做了什么操作都不会经过我们的代理,这样AOP就失去了作用。

二)有些情况,确实需要做代理,而且Interceptor有不太好使的时候,我们就要另辟蹊径了。如下代码和配置所示,一样还是可以成功的。缺点就是
切面表达式不好用了,要自己写代码判断方法是不是要拦截。
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" />


import java.lang.reflect.Method;

import org.aopalliance.aop.Advice;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor;
import org.springframework.beans.factory.InitializingBean;


@SuppressWarnings({"serial"})
public class SpringMvcControllerAspect extends StaticMethodMatcherPointcutAdvisor implements InitializingBean {

//	private static final Logger LOGGER = LoggerFactory.getLogger(SpringMvcControllerAspect.class);
	
	@Override
	public boolean matches(Method method, Class<?> targetClass) {
		// 这里来判断方法是否需要拦截
		// 不用切点表达式,自己写代码判断
		return false;
	}
	
	@Override
	public void afterPropertiesSet() throws Exception {
		super.setOrder(Integer.MAX_VALUE);
		super.setAdvice(MethodInterceptor.INSTANCE);
	}

	// 织入业务逻辑
	// ================================================================================================================
	private static final class MethodInterceptor implements org.aopalliance.intercept.MethodInterceptor, Advice {
		public static final Advice INSTANCE = new MethodInterceptor();
		
		public Object invoke(MethodInvocation invocation) throws Throwable {
			// 前织入
			Object result = invocation.proceed();
			// 后织入
			return result;
		}
	}
}
分享到:
评论
1 楼 chenrl 2017-02-20  

相关推荐

    spring-mvc-官方中文文档

    这个官方中文文档详细地介绍了如何使用 Spring MVC 来开发高效、可维护的 MVC(Model-View-Controller)架构的应用。Spring MVC 提供了丰富的功能,包括请求处理、视图解析、数据绑定、异常处理等,旨在简化 Web ...

    最全最经典spring-mvc教程

    另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    三、Controller与Model-View-Controller模式 在Spring Web MVC中,Controller是实现业务逻辑的关键组件,通常由实现了Controller接口或使用@Controller注解的类组成。它们接收请求,调用服务层方法处理业务,然后将...

    spring-webmvc-5.3.10-API文档-中文版.zip

    赠送jar包:spring-webmvc-5.3.10.jar; 赠送原API文档:spring-webmvc-5.3.10-javadoc.jar; 赠送源代码:spring-webmvc-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-webmvc-5.3.10.pom; 包含翻译后的API...

    SpringMVC+Spring+Spring-Data-JPA整合-完整Demo

    SpringMVC(Spring Model-View-Controller)是Spring框架的一部分,它提供了一个用于构建Web应用程序的MVC设计模式实现。SpringMVC的核心组件包括DispatcherServlet、Controller、ViewResolver、Model和View等。...

    spring-webmvc jar包

    spring-webmvc-4.1.0.RELEASE.jar用于Spring框架的mvc注解

    spring-mvc.xml

    spring-mvc.xml资源下载,本xml为springmvc最纯净版xml!

    配置springmvc的spring-webmvc的jar包

    1. **Spring AOP**:通过AOP实现切面编程,如日志记录、事务管理等。 2. **Spring ORM**:与各种持久层框架(如Hibernate、MyBatis)集成,简化数据访问。 3. **Spring Validation**:集成Bean Validation进行数据...

    spring-mvc-test-sample-master.zip_spring mvc_springmvc-test

    9. **AOP(面向切面编程)**:Spring MVC可以与Spring的AOP模块结合,实现如日志记录、事务管理等功能。 10. **Unit Testing and Integration Testing**:在"spring-mvc-test-sample-master"项目中,很可能包含了对...

    spring-webmvc-4.3.14.RELEASE.zip

    spring-webmvc-4.3.14.RELEASE SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是...

    spring-webmvc-5.3.26.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    spring-webmvc-6.0.9.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    spring-webmvc-5.2.6.RELEASE.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    MVC.rar_SpringMVC Struts_java MVC_mvc_spring-aspects-3.2.2_spri

    在Java Web开发中,Model-View-Controller(MVC)是一种广泛采用的设计模式,用于分离应用程序的数据、业务逻辑和用户界面。SpringMVC是Spring框架的一部分,它为创建基于HTTP的Web应用提供了强大的支持。SpringMVC...

    SpringMVC-Spring-Mybatis-Freemarker整合

    【SpringMVC-Spring-Mybatis-Freemarker整合】是一个常见的Java Web开发技术栈,主要涉及了四个关键组件:Spring MVC(模型-视图-控制器)、Spring(核心框架)、Mybatis(持久层框架)以及Freemarker(模板引擎)。...

    spring-webmvc-5.3.3.jar

    spring-webmvc.jar 各个版本,免费下载 spring-webmvc-RELEASE.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区联系我索要!

    spring-mvc-3.1.xsd

    targetNamespace="http://www.springframework.org/schema/mvc

    spring-mvc-4.0.xsd

    springMVC框架开发的 约束源码

    springmvc-config.xml

    这是一个springmvc-config.xml文件,&lt;?xml version="1.0" encoding="UTF-8"?&gt; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:...

    spring-mvc与xfire的集成

    spring-mvc与xfire的集成 对于这样的集成,看看里面的配置文件就行了 一个简单的接口,对应一个简单的实现。 然后在配置文件里指明就可以了。 DispatcherServlet本身会管理xfire的请求 配置文件中配置的key可以理解...

Global site tag (gtag.js) - Google Analytics