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. HDU 5475:An easy problem 这题也能用线段树做???

    An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. Database--事务

    参考 https://segmentfault.com/a/1190000012669504?utm_source=tag-newest https://blog.csdn.net/qq_371559 ...

  3. Arduino - -- 串口双向通信

    需要用到Arduino UNO的串口双向通信功能,以下源码: int val; void setup() {   Serial.begin(9600); // opensserial port, se ...

  4. Python 官方推荐的一款打包工具

    译者:Jiong 链接: https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 在thoughtbo ...

  5. 六、SAP中以一个变量的形式来定义另一种变量

    一.代码如下: 二.输出

  6. 【转】modelBuilder.Configurations.AddFromAssembly in EF Core

    EntityFramework 6.x protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnMode ...

  7. WindowsForm ComboBoxList 下拉框带复选框 可以动态添加

    先来张效果图: 1.这里需要对控件进行重写,详细内容如下,对此不感兴趣的可以直接跳过这步,下载本人生成的dll,直接看第二小结,下载链接https://pan.baidu.com/s/1gfzrK5t ...

  8. SPOJ FISHER + FPOLICE SPFA+背包

    当初第一次做的是FPLICE这个题,当时就觉得要用图论去搜索,但是当时陷入死思维就是 dp[][]两个维度都是点,这样就违背了题目的本意,题目给定了一个时间T,在不超过时间T的情况下求最小的消耗,这不 ...

  9. vmware桥接模式-无法内网通-克隆机要删除的文件-ssl

    网卡太多自动模式有时候无法正常通信需要绑定外部网卡 rm /etc/udev/rules.d/-persistent-ipoib.rules vmware报错 Microsoft Runtime DL ...

  10. 删除所有的docker容器和镜像(转载)

    列出所有的容器 ID docker ps -aq 停止所有的容器 docker stop $(docker ps -aq) 删除所有的容器 docker rm $(docker ps -aq) 删除所 ...