1. package com.dhht.config.articleAdvice;
  2.  
  3. 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;
  4.  
  5. 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;
  6.  
  7. /**
    * @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 {
  8.  
  9. @Bean
    public TemplateEngine getTemplateEngine(){
    return new TemplateEngine();
    }
  10.  
  11. }
  1. package com.dhht.config.articleAdvice;
  2.  
  3. 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;
  4.  
  5. import javax.annotation.Resource;
    import java.io.File;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
  6.  
  7. /**
    * @Author: sh
    * @Description: ArticleServiceAdvice
    * @Date: 14:19 2019/9/23
    */
    @Slf4j
    @Aspect
    @Component
    public class RegulationServiceAdvice {
  8.  
  9. static final String insert = "insert";
    static final String delete = "delete";
    static final String update = "update";
  10.  
  11. 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/";
  12.  
  13. final String XWZX_LIST = "xwzxList";// 类型数据key-List
    final String ZCFG_LIST = "zcfgList";
    final String HYBZ_LIST = "hybzList";
    final String ZSYD_LIST = "zsydList";
  14.  
  15. 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";
  16.  
  17. @Value("${regulation_path}")
    String REGULATION_PATH;// 缓存页面磁盘路径 D:/page_cahce/page/
  18.  
  19. @Value("${regulation_temp_source}")
    String REGULATION_TEMP_SOURCE;// new_guide
  20.  
  21. @Value("${regulation_details_temp}")
    String REGULATION_DETAILS_TEMP;// news_details
  22.  
  23. @Value("${gateway_temp_source}")
    String GATEWAY_TEMP_SOURCE;// gateway
  24.  
  25. @Value("${wechat_gate_temp}")
    String WECHAT_GATE_TEMP;
  26.  
  27. @Value("${wechat_gate_detail_temp}")
    String WECHAT_GATE_DETAIL_TEMP;
  28.  
  29. @Resource
    PageCacheService pageCacheService;
  30.  
  31. @Resource
    RegulationService regulationService;
  32.  
  33. /**
    * 新增切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.insert(..))")
    public void insertPointCut() {
    }
  34.  
  35. /**
    * 删除切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.delete(..))")
    public void deletePointCut() {
    }
  36.  
  37. /**
    * 更新切点
    */
    @Pointcut("execution(* com.dhht.service.article.RegulationService.update(..))")
    public void updatePointCut() {
    }
  38.  
  39. /**
    * 环绕通知
    *
    * @param joinPoint
    * @param returnValue
    */
    @AfterReturning(value = "insertPointCut()||deletePointCut()||updatePointCut()", returning = "returnValue")
    public void afterReturing(JoinPoint joinPoint, Object returnValue) {
    dealTarMethParamAndReturn(joinPoint, returnValue);
    }
  40.  
  41. /**
    * 处理目标方法的参数与返回值
    *
    * @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;
    }
    }
  42.  
  43. /**
    * 更新到导航模板数据
    */
    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);// 小程序门户
    }
  44.  
  45. /**
    * 更新资讯详情模板数据
    * @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);
    }
  46.  
  47. /**
    * 更新门户-四模块-模板数据
    */
    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);
    }
  48.  
  49. /**
    * 小程序门户列表
    * @param valsMap
    */
    public void geneWechatPage(Map<String,Object> valsMap){
    pageCacheService.setVals(valsMap,WECHAT_GATE_TEMP,WECHAT_GATE_TEMP,REGULATION_PATH+WECHAT_PATH);
    }
  50.  
  51. /**
    * 小程序资讯详情
    * @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);
    }
  52.  
  53. }

spring自定义aop的更多相关文章

  1. Spring 自定义注解,结合AOP,配置简单日志注解 (转)

    java在jdk1.5中引入了注解,spring框架也正好把java注解发挥得淋漓尽致. 下面会讲解Spring中自定义注解的简单流程,其中会涉及到spring框架中的AOP(面向切面编程)相关概念. ...

  2. Spring学习笔记(二)Spring基础AOP、IOC

    Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...

  3. Chapter 4: Spring and AOP:Spring's AOP Framework -- draft

    Spring's AOP Framework Let's begin by looking at Spring's own AOP framework - a proxy-based framewor ...

  4. Spring 自定义注解,配置简单日志注解

    java在jdk1.5中引入了注解,spring框架也正好把java注解发挥得淋漓尽致. 下面会讲解Spring中自定义注解的简单流程,其中会涉及到spring框架中的AOP(面向切面编程)相关概念. ...

  5. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  6. Spring实现AOP的多种方式

    转载自:https://www.cnblogs.com/best/p/5736422.html:加了一些自己的注释: AOP(Aspect Oriented Programming)面向切面编程,通过 ...

  7. 深入Spring:自定义事务管理

    转自: http://www.jianshu.com/p/5347a462b3a5 前言 上一篇文章讲了Spring的Aop,这里讲一下Spring的事务管理,Spring的事务管理是建立在Aop的基 ...

  8. Spring自定义标签解析与实现

           在Spring Bean注册解析(一)和Spring Bean注册解析(二)中我们讲到,Spring在解析xml文件中的标签的时候会区分当前的标签是四种基本标签(import.alias ...

  9. 使用Spring实现AOP(XML+注解)

    一.Spring对AOP的支持 AOP并不是Spring框架特有的,Spring只是支持AOP编程的框架之一,每一个框架对AOP的支持各有特点,有些AOP能够对方法的参数进行拦截,有些AOP对方法进行 ...

随机推荐

  1. PHP循环语句练习题

    <?php //输出0-100所有数字 for ($i=0; $i <101 ; $i++) { echo($i . '<br />'); }; //输出水仙花数 for ($ ...

  2. Spring Boot2(001):入门介绍和一些官网链接参考

    Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/pr ...

  3. Hibernate(八)--session的两种获取方式

    openSession getCurrentSession Hibernate有两种方式获得session,分别是: openSession和getCurrentSession他们的区别在于1. 获取 ...

  4. SQL的查询结果复制到Excel 带标题Head 有换行符导致换行错乱 的解决方案

    将SQL查询到的结果保存为excel有很多方法,其中最简单的就是直接复制粘贴了 1.带Head的复制粘贴 1)先左击红色区域实现选择所有数据 2)随后右击选择Copy with Headers  再粘 ...

  5. IE8Get请求中文不兼容:encodeURI的使用

    IE8Get请求中文不兼容:encodeURI的使用 在开发过程中遇到在IE8下,请求出错. 后发现Get请求中含有中文字符. 使用js自带的encodeURI函数对中文进行编码,问题解决. enco ...

  6. Window Nginx安装

    1.下载Nginx 下载地址:http://nginx.org/en/download.html 我这里下载的版本是: nginx/Windows-1.12.2 2.解压Nginx 把下载下来的zip ...

  7. Ubuntu13.04闪屏的问题

    我的电脑Y460,双显切换,win7+ubuntu双系统,就是这个坑爹的双显切换,导致安装ubuntu13.04后屏老闪,网上查阅资料得知是显卡问题,一种是说显卡驱动问题,一种是说双显卡问题,双显卡问 ...

  8. .pcd格式点云文件的显示

    利用pcl_viewer工具pcl_viewer rtabmap_cloud.pcd

  9. CTF-域渗透--HTTP服务--命令注入1

    开门见山 1. 扫描靶机ip,发现PCS 192.168.31.210 2. 用nmap扫描开放服务和服务版本 3. 再扫描全部信息 4. 探测http服务的目录信息 5. 再用dirb扫描 6. 查 ...

  10. 京东云携手Mellanox,设计最先进SDN硬件加速功能并开源

    京东云携手Mellanox,设计最先进SDN硬件加速功能并开源 最新技术播报 京东云开发者社区  导语新一代 SDN.NFV 和云原生计算技术正在推动应用实例的极限,这些实例可以在虚拟化和容器化的服务 ...