SpringAOP 注解方式代码示例

package com.zf.aspect;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;import com.zf.dao.PersonDao;@Component
@Aspect
public class DaoAspect {@Pointcut("execution(* com.zf.dao.PersonDao.*(..))")public void daoPointCut(){};@Before("daoPointCut()")public void beforeDao(JoinPoint joinPoint){PersonDao pd = (PersonDao)joinPoint.getTarget();pd.setMessage("helloWorld");System.out.println();System.out.println("beforeDao...");}@AfterReturning("daoPointCut()")public void afterDao(JoinPoint joinPoint){System.out.println(joinPoint.getTarget() instanceof PersonDao);System.out.println("afaterDao...");}@Around("daoPointCut()")public Object daoAround(ProceedingJoinPoint joinPoint) {  Object[] args = joinPoint.getArgs();  System.out.println("argsLength: " + args.length);for (Object object : args) {        //得到目标对象System.out.println(object + "  -------------------------");}Object obj = null;  try {       obj = joinPoint.proceed(args);} catch (Throwable e) {  e.printStackTrace();  }  return obj;  }  }
package xxx.design.pattern.proxy.balance;import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.nico.noson.Noson;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;@Aspect
@Component
public class XXXServiceInterceptor {/*** 日志打印器*/private Logger logger = Logger.getLogger(XXXServiceInterceptor.class);/*** StringRedis工具类*/@Resourceprivate RedisStrUtil redisStrUtil;/*** 方法拦截* @param point* @return*/@Around(value = "execution(public * com.xxx.services.impl.XXXServiceImpl.listAll(..))" , argNames="point")public Object Method(ProceedingJoinPoint point) {//被拦截方法对应的返回值Object result = null;//Redis缓存对应的key值StringBuffer redisKey = new StringBuffer("redis_key:xxx@");//被拦截方法对应的参数Object[] args = point.getArgs();//根据参数,计算出key值for(Object obj : args){redisKey.append(obj.toString());redisKey.append("#");}//尝试从缓存中获取待返回值try{String value = redisStrUtil.get(redisKey.toString());result = Noson.parseArray(value);logger.info("使用Redis查询缓存成功,listKey:" + redisKey.toString() + " size:" + (result != null ? ((List)result).size() : 0));}catch (Exception e){logger.error("从Redis中获取缓存信息失败:" + e.getMessage());}//没有从缓存中获取到待返回的值,从数据库中取出来,并把值放入Redis中try {if(result == null || ((List)result).size() == 0){result = point.proceed();redisStrUtil.setEx(redisKey.toString() , Noson.reversal(result) , 31 , TimeUnit.DAYS);logger.info("使用数据库查询数据成功,将数据保存到redis中,listKey:" + redisKey.toString() + " size:" + (result != null ? ((List)result).size() : 0));}} catch (Throwable e) {logger.error("从数据库中获取数据信息失败:" + e.getMessage());}//打印日志,现在Redis缓存的key值logger.info("redis key : " + redisKey.toString());//返回结果return result;}}

SpringAOP 注解方式代码示例相关推荐

  1. 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )

    文章目录 一.根据 Key 获取 map 集合中对应的值 1.通过 map.Key 方式获取 map 集合中的值 Value 2.通过 map.'Key' 方式获取 map 集合中的值 Value 3 ...

  2. Java元注解及代码示例

    文章目录 简介 元注解 @Documented @Target @Retention @Inherited 代码示例 @Repeatable 代码示例 简介 注解是 JDK5.0 引入的一种注释机制, ...

  3. Python Django 根路由命名空间URL解析方式代码示例

  4. Java实现字符串反转的四种方式代码示例

    第一种 (最投机取巧的一种): private static void reverse1() {String s = "abcdefg";StringBuilder sb = ne ...

  5. java7代码示例_Java中的七种排序方式代码示例

    packagebaseJava;/*** @title SortMethods.java *@authorDonsenChen * @Date 2018年5月2日 上午10:16:03 * @Desc ...

  6. gmm聚类python_GMM-实现聚类的代码示例

    Matlab 代码: % GMM code function varargout = gmm(X, K_or_centroids) % input X:N-by-D data matrix % inp ...

  7. spring注解方式 2022/08/22

    spring注解方式 代码整体布局: 代码如下: pom.xml: spring-1.xml: Student: Test: Test2: spring-2.xml: Car: Driver: Tes ...

  8. mysql+xml+注释,springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)...

    一.注解方式 pom org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 mysql mysql-connector-java org. ...

  9. SpringAop两种配置:xml配置和注解方式

    一,什么是SpringAop? 所谓的springaop就是面向切面编程,就是在你的原有项目功能上,通过aop去添加新的功能,这些功能是建立在原有的功能基础上的,而且不会修改原来的动能代码以及功能逻辑 ...

最新文章

  1. 提高C++性能的编程技术笔记:编码优化+测试代码
  2. NAS设置NFS共享便于KODI添加视频的方式
  3. Leetcode 219. 存在重复元素 II 解题思路及C++实现
  4. python基础教程【目录】
  5. Elasticsearch script使用详解
  6. shell习题第6题:监听80端口
  7. 在ubuntu上mysql出现ERROR 1045(28000):Access denied for user ‘young‘@’localhost‘(using password:NO)...
  8. poj2632 累死了
  9. phpStydy配置memcache扩展
  10. 如何在柱状图中点连线_如何快速掌握MSA
  11. 楼房顶顶面起渣是何原因?怎么修补?
  12. [BZOJ1101][POI2007]Zap
  13. HDU 4990 Reading comprehension
  14. Java线程唤醒与阻塞的定义与使用方法
  15. java的swing案例
  16. 踩坑录·CacheCloud无法启动
  17. 想成为一名黑客怎么办?
  18. [网络规划] 拓扑图绘图工具yED Graph Editor使用(持续更新)
  19. URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
  20. hadoop配置eclipse的开发环境

热门文章

  1. Google Analytics异步代码-创建虚拟浏览量跟踪
  2. 企业项目开发中的问题
  3. SVG 教程 (一)
  4. Shell编程:awk使用总结
  5. 如何显示Magento的最新产品
  6. php中获取上一页的url地址
  7. 华为机试——求int型正整数在内存中存储时1的个数
  8. 《C和指针》——宏中容易出现的错误
  9. 【今日CV 计算机视觉论文速览】Thu, 7 Mar 2019
  10. JVM—垃圾回收GC算法