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;
}
}
}
分享到:
相关推荐
redis-service_pubsub.rar。 springMVC集成spring-data-redis实现发布订阅。
spring 官网上的一个spring mvc实例很有学习价值
spring-webmvc-4.1.3.RELEASE.jarspring-webmvc-4.1.3.RELEASE.jarspring-webmvc-4.1.3.RELEASE.jarspring-webmvc-4.1.3.RELEASE.jarspring-webmvc-4.1.3.RELEASE.jar
SpringMVC-Mybatis-Shiro-redis-master..............
赠送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...
spring-mvc-官方中文文档
spring-webmvc-5.0.9 jar包、源码和javadoc,官网无修改版本。
spring-mvc.xml资源下载,本xml为springmvc最纯净版xml!
SpringMVC+Spring+Spring-Data-JPA整合-完整Demo
配置springmvc的spring-webmvc的jar包,可用于ssm框架的使用
spring-webmvc-4.1.0.RELEASE.jar用于Spring框架的mvc注解
本人平时学习的宝贝,都是精华,一直保存着,现送给大家
赠送jar包:spring-webmvc-4.3.20.RELEASE.jar 赠送原API文档:spring-webmvc-4.3.20.RELEASE-javadoc.jar 赠送源代码:spring-webmvc-4.3.20.RELEASE-sources.jar 包含翻译后的API文档:spring-webmvc-4.3.20....
Spring-MVC处理XSS、SQL注入攻击的方法总结
spring-spring-mvc-mybatis整合例子,建议前往https://blog.csdn.net/qq_40374604/article/details/87940625免费获取
SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...
spring-mvc.xml spring-mybatis.xml web.xml log4j.properties,项目中需要用到的配置文件。直接可用。
主要用于非maven项目的spring框架,这里包含了开发所需要的大部分jar包,免去手动折腾的烦恼。内容预览【https://s3.ax1x.com/2021/01/08/snWNcD.png】
Spring-mvc spring ,mvc 适合入门
spring-mvc 官方实例