一个应用可以上传附件,其实只需要配置 如下信息即可
在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 里面的参数 就是修改后的业务逻辑
在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 里面的参数 就是修改后的业务逻辑