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);
} }

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. tensorflow--保存加载模型

    s=mnist.train.next_batch(batch_size)print(xs.shape)print(ys.shape) # #从集合中取全部变量# tf.get_collection() ...

  2. C语言-存储类&作用域&生命周期&链接属性

    1.概念解析(1)存储类 a.存储类就是存储类型,也就是描述C语言变量在何种地方存储. b.内存有多种管理办法:栈.堆.数据段.bss段..text段......一个变量的存储类属性就是描述这个变量存 ...

  3. 15 ~ express ~ 用户数据分页原理和实现

    一,在后台路由 /router/admin.js 中 1,限制获取的数据条数 : User.find().limit(Number) 2,忽略数据的前(Number)条数据 : skip(Number ...

  4. filter滤镜兼容ie的rgba属性

    要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,0.1); 但是要兼容到ie8.这个就有点 ...

  5. java中的字符串String

    一.String简介d 参考:https://www.cnblogs.com/zhangyinhua/p/7689974.html String类代表字符串. java.lang.String: Ja ...

  6. 详解contextConfigLocation|Spring启动过程详解(转)

    原文链接:https://blog.csdn.net/qw222pzx/article/details/78191670 spring的应用初始化流程一直没有搞明白,刚刚又碰到了相关的问题.决定得好好 ...

  7. mini2440 裸机程序,下载到nand 里面,复制到 sdram 中不运行

    按照韦东山的视频中 sdram的裸机代码,写了一份,通过 minitools 下载到 0x30000000,然后烧录到 nand中,接过不能正常运行. 尝试过多种方法后,只有一种解决方法,就是不要用 ...

  8. 吴裕雄--天生自然 JAVASCRIPT开发学习:输出

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. delphi的procedure of object

    delphi的procedure of object(一个特殊的指针类型) 理论: //适用于实现不是某一特定过程或函数 type TNotifyEvent = procedure(Sender: T ...

  10. CodeForces 51C 二分搜索

    校队选拔神马的事情就不说了,哥们反正是要崛起的人了! 感谢何骐的提醒. 校队选拔的时候又被二分给坑了,所以还想做几道二分搜索的题目来练练手. C - Three Base Stations Time ...