SpringMVC的AOP总结

SpringMVC的AOP总结

1、Filter 过滤器

  • Filter是Servlet规范中规定的,只能用于WEB中, 在Servlet前后起作用

  • 它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次

  • 使用场景: 修改字符编码; 对入参进行校验, 校验不通过返回错误信息.

  • 原理: 基于函数回调( filterchain)的方式调用

2、Interceptor 拦截器

  • 拦截器是Spring容器内的,是Spring框架支持的,可以使用Spring内的任何资源、对象

  • 可以深入到方法的调用前后、异常抛出前后等深层次的程度做处理

  • 缺点是只能对 Controller 请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

  • 原理: 基于Java的反射机制,属于面向切面编程(AOP)的一种运用

  • 使用场景: 对入参进行校验

3、RequestBodyAdvice

  • 配合 @ControllerAdvice 和 @RequestBody 注解使用, 可以拦截所有的请求. 如果不使用 @RequestBody 修饰入参对象, 不会拦截

  • 原理: AOP

  • 使用场景: 参数的过滤,字符的编码,第三方的解密

4、ResponseBodyAdvice

  • 拦截Controller方法默认返回参数,统一处理返回值/响应体

  • 使用场景: 对控制层的返回结果进行加密

  • 原理: AOP

5、AOP使用

  • 面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等

  • 使用场景: 统一记录控制层请求日志以及返回结果

用法总结

  • 如果是拦截静态资源,需要使用过滤器;

  • 如果是参数校验,可以使用拦截器实现;

  • 如果对参数加解密,可以使用RequestBodyAdivce 和ResponseBodyAdvice;

  • 如果是记录访问日志,可以使用 AOP.

拦截顺序是:filter—>Interceptor–>ControllerAdvice–>@Aspect -->Controller;

程序执行的顺序是先进过滤器,再进拦截器,最后进切面。注意:如果拦截器中preHandle方法返回的为false时,则无法进入切面.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring提供了一种开发模式,称为面向切面编程(AOP),可以通过它来实现数据库的切换。在Spring MVC中,我们可以使用AOP来拦截和修改方法的执行,以便动态切换数据库。 首先,我们需要配置SpringAOP,以便在运行时拦截方法。这可以通过在Spring配置文件中添加以下代码来实现: ``` <aop:aspectj-autoproxy/> ``` 接下来,我们需要创建一个切面类,该类将拦截和处理我们选择的目标方法。在这个切面类中,我们可以编写切面逻辑来判断需要使用哪个数据库。下面是一个示例切面类的代码: ```java @Aspect @Component public class DatabaseSwitchAspect { @Before("execution(* com.example.controller.*.*(..))") public void switchDatabase(JoinPoint joinPoint) { // 判断需要使用哪个数据库 if (需要使用第一个数据库的条件) { // 设置第一个数据库的相关配置 DataSourceContextHolder.setDataSourceType(第一个数据库); } else { // 设置第二个数据库的相关配置 DataSourceContextHolder.setDataSourceType(第二个数据库); } } } ``` 在以上代码中,我们使用@Before注解来指定拦截哪些方法。在拦截到方法之后,我们可以在切面逻辑中根据判断条件来选择需要使用的数据库,并使用自定义的DataSourceContextHolder来动态设置数据源。 最后,我们需要在Spring配置文件中配置数据源和事务管理器。这里我们需要配置两个数据源和对应的事务管理器,以便与切面类中设置的数据源保持一致。 通过以上步骤,我们就能够实现Spring MVC中AOP的方式来动态切换数据库。当我们拦截到目标方法时,根据条件切换数据库,从而实现数据库的动态切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值