• spring自定义aop


    package com.dhht.config.articleAdvice;

    import com.dhht.util.UUIDUtil;
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    import org.springframework.stereotype.Component;
    import org.springframework.util.ResourceUtils;
    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;

    import javax.annotation.Resource;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.lang.reflect.Method;
    import java.util.Map;

    /**
    * @Author: sh
    * @Description: ArticleServiceCfg
    * @Date: 14:18 2019/9/23
    */
    @Slf4j
    @Configuration
    @ComponentScan({"com.dhht.service.article.impl","com.dhht.service.link.impl","com.dhht.service.filemanage.impl"})
    @EnableAspectJAutoProxy
    public class RegulationServiceCfg {

    @Bean
    public TemplateEngine getTemplateEngine(){
    return new TemplateEngine();
    }

    }

    package com.dhht.config.articleAdvice;

    import com.dhht.model.Regulation;
    import com.dhht.model.User;
    import com.dhht.service.PageCacheService;
    import com.dhht.service.article.RegulationService;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;

    import javax.annotation.Resource;
    import java.io.File;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    /**
    * @Author: sh
    * @Description: ArticleServiceAdvice
    * @Date: 14:19 2019/9/23
    */
    @Slf4j
    @Aspect
    @Component
    public class RegulationServiceAdvice {

    static final String insert = "insert";
    static final String delete = "delete";
    static final String update = "update";

    static final String REGULATION_ENTY_K = "regulationEnty";// 实体数据模型名
    static final String CACHE_FILE_SUFFIX = ".html";
    static final String DETAILS_PATH = "details";//
    static final String WECHAT_PATH = "/wechat/";

    final String XWZX_LIST = "xwzxList";// 类型数据key-List
    final String ZCFG_LIST = "zcfgList";
    final String HYBZ_LIST = "hybzList";
    final String ZSYD_LIST = "zsydList";

    final String GATE_TEMP_0 = "gate_type_0";// 门户模块-模板Id
    final String GATE_TEMP_1 = "gate_type_1";
    final String GATE_TEMP_2 = "gate_type_2";
    final String GATE_TEMP_3 = "gate_type_3";

    @Value("${regulation_path}")
    String REGULATION_PATH;// 缓存页面磁盘路径 D:/page_cahce/page/

    @Value("${regulation_temp_source}")
    String REGULATION_TEMP_SOURCE;// new_guide

    @Value("${regulation_details_temp}")
    String REGULATION_DETAILS_TEMP;// news_details

    @Value("${gateway_temp_source}")
    String GATEWAY_TEMP_SOURCE;// gateway

    @Value("${wechat_gate_temp}")
    String WECHAT_GATE_TEMP;

    @Value("${wechat_gate_detail_temp}")
    String WECHAT_GATE_DETAIL_TEMP;

    @Resource
    PageCacheService pageCacheService;

    @Resource
    RegulationService regulationService;

    /**
    * 新增切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.insert(..))")
    public void insertPointCut() {
    }

    /**
    * 删除切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.delete(..))")
    public void deletePointCut() {
    }

    /**
    * 更新切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.update(..))")
    public void updatePointCut() {
    }


    /**
    * 环绕通知
    *
    * @param joinPoint
    * @param returnValue
    */
    @AfterReturning(value = "insertPointCut()||deletePointCut()||updatePointCut()", returning = "returnValue")
    public void afterReturing(JoinPoint joinPoint, Object returnValue) {
    dealTarMethParamAndReturn(joinPoint, returnValue);
    }

    /**
    * 处理目标方法的参数与返回值
    *
    * @return
    */
    public synchronized boolean dealTarMethParamAndReturn(JoinPoint joinPoint, Object returnValue) {
    try {
    String name = joinPoint.getSignature().getName();
    if (insert.equals(name)) {
    Object[] args = joinPoint.getArgs();
    Regulation param_0 = (Regulation) args[0];
    User param_1 = (User) args[1];
    Regulation result = (Regulation) returnValue;
    if (null!=result) {
    updateDetatiTempData(result);
    geneWechatDetail(result);
    updateGuideTempData();
    }
    }
    if (delete.equals(name)) {
    Object[] args = joinPoint.getArgs();
    Regulation param = (Regulation) args[0];
    Regulation result = (Regulation) returnValue;
    if (null!=result) {
    updateGuideTempData();
    String id = result.getId();
    File file = new File(REGULATION_PATH + DETAILS_PATH, id + CACHE_FILE_SUFFIX);
    if (file.exists()) {// 删除缓存文件
    file.delete();
    }
    File wechatFile = new File(REGULATION_PATH + WECHAT_PATH + DETAILS_PATH, id + CACHE_FILE_SUFFIX);
    if (wechatFile.exists()) {// 删除缓存文件
    wechatFile.delete();
    }
    }
    }
    if (update.equals(name)) {
    Object[] args = joinPoint.getArgs();
    Regulation param = (Regulation) args[0];
    Regulation result = (Regulation) returnValue;
    if (null!=result) {
    String id = result.getId();
    if(!StringUtils.isEmpty(id)){
    result = regulationService.selectRegulationById(id);
    }
    updateDetatiTempData(result);
    geneWechatDetail(result);
    updateGuideTempData();
    }
    }
    return true;
    } catch (Exception e) {
    log.info(e.getMessage());
    return false;
    }
    }

    /**
    * 更新到导航模板数据
    */
    public void updateGuideTempData(){
    if(null==regulationService){
    return;
    }
    List<Regulation> xwzxList = regulationService.queryRegulationAll(0);
    List<Regulation> zcfgList = regulationService.queryRegulationAll(1);
    List<Regulation> hybzList = regulationService.queryRegulationAll(2);
    List<Regulation> zsydList = regulationService.queryRegulationAll(3);
    Map<String,Object> valMap = new HashMap<>();
    valMap.put(XWZX_LIST,xwzxList);
    valMap.put(ZCFG_LIST,zcfgList);
    valMap.put(HYBZ_LIST,hybzList);
    valMap.put(ZSYD_LIST,zsydList);
    pageCacheService.setValToTemplat(valMap,REGULATION_TEMP_SOURCE);// 添加tap
    pageCacheService.setValToTemplat(valMap,GATEWAY_TEMP_SOURCE);// 填充门户
    geneWechatPage(valMap);// 小程序门户
    }

    /**
    * 更新资讯详情模板数据
    * @param regulation
    */
    public void updateDetatiTempData(Regulation regulation){
    Map<String, Object> valsMap = new HashMap<>();
    valsMap.put(REGULATION_ENTY_K, regulation);
    String id = regulation.getId();
    pageCacheService.setVals(valsMap, REGULATION_DETAILS_TEMP, id, REGULATION_PATH + DETAILS_PATH);
    }

    /**
    * 更新门户-四模块-模板数据
    */
    public void updateGateTypeTempData(List<Regulation> dataList,Integer type){
    Map<String,Object> vals = new HashMap<>();
    String tempId = null;
    if(0==type){
    tempId = GATE_TEMP_0;
    vals.put(XWZX_LIST,dataList);
    }
    if(1==type){
    tempId = GATE_TEMP_1;
    vals.put(ZCFG_LIST,dataList);
    }
    if(2==type){
    tempId = GATE_TEMP_2;
    vals.put(HYBZ_LIST,dataList);
    }
    if(3==type){
    tempId = GATE_TEMP_3;
    vals.put(ZSYD_LIST,dataList);
    }
    pageCacheService.setValToTemplat(vals,tempId);
    }

    /**
    * 小程序门户列表
    * @param valsMap
    */
    public void geneWechatPage(Map<String,Object> valsMap){
    pageCacheService.setVals(valsMap,WECHAT_GATE_TEMP,WECHAT_GATE_TEMP,REGULATION_PATH+WECHAT_PATH);
    }

    /**
    * 小程序资讯详情
    * @param regulation
    */
    public void geneWechatDetail(Regulation regulation){
    Map<String, Object> valsMap = new HashMap<>();
    valsMap.put(REGULATION_ENTY_K, regulation);
    String id = regulation.getId();
    pageCacheService.setVals(valsMap, WECHAT_GATE_DETAIL_TEMP, id, REGULATION_PATH + WECHAT_PATH + DETAILS_PATH);
    }

    }
  • 相关阅读:
    c++趣味之难以发现的bug
    解决html5 canvas 绘制字体、图片与图形模糊问题
    c++趣味之shared_ptr额外好处
    标准mysql(x64) Windows版安装过程
    解决Chrome与jQuery菜单兼容问题
    在Linux与Windows上获取当前堆栈信息
    TypeScript技巧集锦(陆续更新)
    c++趣味之变量名,颠覆所有教科书的VisualStudio
    Web前端:博客美化:三、右上角的Github Ribbon
    Web前端:博客美化:二、鼠标特效
  • 原文地址:https://www.cnblogs.com/sung1024/p/11700362.html
Copyright © 2020-2023  润新知