SpringAOP 注解方式代码示例
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 注解方式代码示例相关推荐
- 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )
文章目录 一.根据 Key 获取 map 集合中对应的值 1.通过 map.Key 方式获取 map 集合中的值 Value 2.通过 map.'Key' 方式获取 map 集合中的值 Value 3 ...
- Java元注解及代码示例
文章目录 简介 元注解 @Documented @Target @Retention @Inherited 代码示例 @Repeatable 代码示例 简介 注解是 JDK5.0 引入的一种注释机制, ...
- Python Django 根路由命名空间URL解析方式代码示例
- Java实现字符串反转的四种方式代码示例
第一种 (最投机取巧的一种): private static void reverse1() {String s = "abcdefg";StringBuilder sb = ne ...
- java7代码示例_Java中的七种排序方式代码示例
packagebaseJava;/*** @title SortMethods.java *@authorDonsenChen * @Date 2018年5月2日 上午10:16:03 * @Desc ...
- gmm聚类python_GMM-实现聚类的代码示例
Matlab 代码: % GMM code function varargout = gmm(X, K_or_centroids) % input X:N-by-D data matrix % inp ...
- spring注解方式 2022/08/22
spring注解方式 代码整体布局: 代码如下: pom.xml: spring-1.xml: Student: Test: Test2: spring-2.xml: Car: Driver: Tes ...
- mysql+xml+注释,springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)...
一.注解方式 pom org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 mysql mysql-connector-java org. ...
- SpringAop两种配置:xml配置和注解方式
一,什么是SpringAop? 所谓的springaop就是面向切面编程,就是在你的原有项目功能上,通过aop去添加新的功能,这些功能是建立在原有的功能基础上的,而且不会修改原来的动能代码以及功能逻辑 ...
最新文章
- 提高C++性能的编程技术笔记:编码优化+测试代码
- NAS设置NFS共享便于KODI添加视频的方式
- Leetcode 219. 存在重复元素 II 解题思路及C++实现
- python基础教程【目录】
- Elasticsearch script使用详解
- shell习题第6题:监听80端口
- 在ubuntu上mysql出现ERROR 1045(28000):Access denied for user ‘young‘@’localhost‘(using password:NO)...
- poj2632 累死了
- phpStydy配置memcache扩展
- 如何在柱状图中点连线_如何快速掌握MSA
- 楼房顶顶面起渣是何原因?怎么修补?
- [BZOJ1101][POI2007]Zap
- HDU 4990 Reading comprehension
- Java线程唤醒与阻塞的定义与使用方法
- java的swing案例
- 踩坑录·CacheCloud无法启动
- 想成为一名黑客怎么办?
- [网络规划] 拓扑图绘图工具yED Graph Editor使用(持续更新)
- URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
- hadoop配置eclipse的开发环境