本文共 3439 字,大约阅读时间需要 11 分钟。
/** * 返回 5 条蛋糕消息 * @param page 传入的参数 * @return */ @GetMapping("/cake/{page}") @ResponseBody public Listcake(@PathVariable Integer page) { int maxRange = 1000; if(page<=0||page >maxRange) { return Collections.emptyList(); } return cakeInfoService.homePage(new Page<>(page, CakeInfo.SELECT_SIZE)); }
图片存储在服务器上,然后数据库写入的是绝对路径,要把返回前端的路径修改一下,因为在拦截器设置的路径映射不一样
让哥告诉你 AOP的玩法package com.ywfcake.demo.config;import org.springframework.stereotype.Component;import org.springframework.util.ClassUtils;import java.util.Objects;/** * @Author lyr * @create 2020/3/22 14:06 */@Componentpublic class Constant { public String dir = Objects.requireNonNull(Objects.requireNonNull(ClassUtils.getDefaultClassLoader()) .getResource("")) .getPath()+"/static/upload/tmp/" ; public String webDir = "/show/";}
自定义一个标记注解
package com.ywfcake.demo.config;import java.lang.annotation.*;/** * @Author lyr * @create 2020/3/22 16:37 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ListHandler { }
package com.ywfcake.demo.config;import com.ywfcake.demo.entity.pojo.CakeInfo;import com.ywfcake.demo.exception.ServiceException;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.Resource;import java.util.List;import java.util.stream.Collectors;/** * @Author lyr * @create 2020/3/22 16:25 */@Aspect@Component@Slf4jpublic class ListAspect { @Resource private Constant constant; //execution用于切出类的方法,其实还可以指定对应的打上注解的方法 @Pointcut("@annotation(ListHandler)") public void delegate(){ } @Around("delegate()") public Object around(ProceedingJoinPoint pjp) { Object result = null; try{ //System.out.println("前"); result = pjp.proceed(); //System.out.println("后"); //后置通知 } catch (Throwable throwable) { //异常通知 throw new ServiceException(throwable,"aop出现了异常"); }finally { //最终通知 } if(result!=null) { Listlist = (List )result; list = list.stream().map(cakeInfo -> cakeInfo.setImageLink(cakeInfo.getImageLink().replace(constant.dir,constant.webDir))) .collect(Collectors.toList()); log.info("AOP 返回结果{}",result); log.info("dir: {}",constant.dir); log.info("webDir: {}",constant.webDir); return list; } return result; }}
在接口方法 或者实现方法上打个注解
@ListHandler @Cacheable(value = "homeFirstPage") @Override public ListhomeFirstPage() { return this.page(new Page (1,CakeInfo.SELECT_SIZE),homeWrapper).getRecords(); }
这样就可以轻松复用处理逻辑
别忘记导包
org.aspectj aspectjrt org.aspectj aspectjweaver org.springframework.boot spring-boot-starter-aop
AspectJ框架为 Aop实现提供了一套注解,用来取代 配置文件中为实现AOP功能所配置的臃肿代码
转载地址:http://fauzi.baihongyu.com/