spring mvc aop 拦截 附近上传

本文详细介绍了如何配置应用附件上传功能,并通过AOP实现控制器与服务方法的拦截,包括设置最大上传大小、内存限制,以及在控制器和服务层实现前置和后置通知。同时解释了在服务方法中通过对象传递改变参数值的操作及其原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一个应用可以上传附件,其实只需要配置 如下信息即可


   在servlet.xml 里面新增  (上传附件最大值,最大内存)


     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <property name="maxUploadSize">
           <value>5242800</value>
         </property>
         <property name="maxInMemorySize">
           <value>4096</value>
         </property>
     </bean>




     在写一个上传controller 附件接收类型 是MultipartFile  对象,保存该对象的相应信息即可




  
    应用中的切面使用和配置
   
    1 拦截controller  在 web类下新增包 interceptor ,在该包下新建 AopInterceptor


     @Aspect
     public class AopInterceptor{


         @before("execution(* web..*.*Controller.*(..)) &&"+"args(cmd,..)")
         public void before(JoinPoint joinPoint,BaseCommand cmd){
          system.out.println(" before ");
         }


         @AfterReturning("execution(* web..*.*Controller.*(..)) &&"+"args(cmd,..)")
         public void before(JoinPoint joinPoint,BaseCommand cmd){
          system.out.println(" after ");
         }
     }
     
      在 servlet.xml下 定义aop 拦截 


         <!-- aop拦截controller 应该在和扫描controller的配置在同一个.xml里面,否则切面拦截失效 -->
       <bean id="aopInterceptorController" class="web.interceptor.AopInterceptor"/>
       <aop:aspectj-autoproxy />


       写一个controller 当请求时候会发现 打印信息


 
    2 拦截service或者其他包的方法,并且改变入参


       
       在interceptor 下新增 AopMethodInterceptor




       @aspect
       public class AopMethodInterceptor{


          @Before("execution(* web.service.DemoService.serviceTest(..)) &&"+"args(prodId,..)")
          public void beforeMethod(JoinPoint joinPoint,long prodId ){
             prodId= 1234;


          }


          @AfterReturning("execution(* web.service.DemoService.serviceTest(..)) &&"+"args(prodId,..)")
          public void beforeMethod(JoinPoint joinPoint,long prodId ){
             system.out.println(" 修改后 ");


          }


       }




      在spring-context.xml里面新增
      
         <!-- aop拦截service 应该在和扫描service 的配置在同一个.xml里面,否则切面拦截失效 -->
       <bean id="aopMethodInterceptor" class="web.interceptor.AopMethodInterceptor"/>
       <aop:aspectj-autoproxy />


       在调用 DemoService 中的serviceTest 方法时 就会发现 通过切面拦截改变 prodId 的值并没有生效
       原因是 通过变量改变这个值,等于又重新创建堆栈空间,所以没有生效


       那么通过对象就可以 ,改变如下




       @aspect
       public class AopMethodInterceptor{


          @Before("execution(* web.service.DemoService.serviceTest(..)) &&"+"args(cmd,..)")
          public void beforeMethod(JoinPoint joinPoint,DemoCommand cmd ){
             cmd.setRecId("1234");


          }


          @AfterReturning("execution(* web.service.DemoService.serviceTest(..)) &&"+"args(cmd,..)")
          public void beforeMethod(JoinPoint joinPoint,DemoCommand cmd){
             system.out.println(" 修改后 ");


          }


       }




        通过这种对象传递,改变了该对象的属性值,并没有创建堆空间,因此修改后有效,serviceTest 里面的参数 就是修改后的业务逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值