spring中自定义注解(annotation)与AOP中获取注解


-
spring中自定义注解(annotation)与AOP中获取注解.通过实例演示自定义注解。
切面配合自定义注解,无效_course
2018-05-10感谢各位大佬的关注。问题如下: 我自定义了一个注解@Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPo
Spring 怎么获取自定义注解标注的方法_course
2019-01-12在我自己的项目中,我自定义一个注解 ``` @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface ExcelSheet { /** * 表格类别 * @return */ String value(); /** * 创建的顺序(越大越往后执行) * @return */ int index(); } ``` 用来标注一些方法 例如: ``` @ExcelSheet(value = "excel", index = 1) public void firstCallImpl() { //一些执行的代码 } ``` 我现在的需求: 如果有多个方法被这个注解标注了那么,我能通过这个注解获取这个方法吗? 感谢大佬们的回答
9.61MB
SpringMVC利用AOP实现自定义注解记录日志
2015-10-14SpringMVC利用AOP实现自定义注解记录日志
请教SPRING大神,spring有没有办法实现:在类上面加上注解来实现该类的下的所有方法进行AOP拦截_course
2018-06-11xml配置文件如下: <bean id="tokenAop" class="com.xxx.mps.interfaces.common.fitter.TokenAop"/> <aop:config e
spring如何在Aspect中获取切点注解方法的泛型参数类型_course
2018-07-26业务场景是这样:想要做一个自定义注解@MethodCache,注解方法,功能是通过Aspect切片来自动缓存方法结果 ``` @Target({ METHOD }) @Retention(RUNTIME) public @interface MethodCache { /** * 过期时间 单位秒 默认60秒 */ int expire() default 60; } ``` Aspect类 ``` @Aspect @Configuration public class MethodCacheAnnotationAspect { // 日志 private Logger logger = LoggerFactory.getLogger(MethodCacheAnnotationAspect.class); //redis @Autowired private RedisTemplate bbscache; // around 建言 切入点为匹配注解了@MethodCache @Around("@annotation(com.ewt360.bbsapi.service.component.MethodCache)") public Object cacheProcess(ProceedingJoinPoint jp) throws Throwable { Class<?> targetClz = jp.getTarget().getClass(); String methodName = jp.getSignature().getName(); if(!(jp.getSignature() instanceof MethodSignature)){ logger.warn("该方法接口无法启用缓存功能: {}", jp.getSignature().toLongString()); return jp.proceed(); } MethodSignature methodSign = (MethodSignature)jp.getSignature(); MethodCache sc = methodSign.getMethod().getAnnotation(MethodCache.class); if (sc == null) return jp.proceed(); int expire = sc.expire() > 0 ? sc.expire() : 200; // 组装缓存key String cacheKey = buildCacheKey(targetClz, methodName, jp.getArgs()); logger.info("cacheInvoke =>{}",cacheKey); Object rval = cacheInvoke(sc, methodSign, jp, cacheKey, expire); return rval; } private String buildCacheKey(Class targetClz, String methodName, Object[] args){ return targetClz.getPackage()+methodName+ StringUtils.arrayToDelimitedString(args, "."); } private Object cacheInvoke(MethodCache sc, MethodSignature methodSign, ProceedingJoinPoint jp, String cacheKey, int expire) throws Throwable { //得到方法的结果类型 Class returnClazz = methodSign.getReturnType(); Object result; Object rval = bbscache.opsForValue().get(cacheKey); if (rval == null) { logger.info("miss from cache, load backend for key : {}", cacheKey); result = jp.proceed(); if(result != null){ logger.info("cache to redis {},{}", cacheKey, JSON.toJSONString(result)); bbscache.opsForValue().set(cacheKey, result, expire, TimeUnit.SECONDS); } } else{ if(ObjectUtils.isBaseType(returnClazz)){ result = rval; } else { JSON.parseObject((String) rval, new TypeReference<List<Integer>>() {}); result = JSONObject.toJavaObject((JSON) rval, returnClazz); } logger.info("cache get object: {}", JSON.toJSONString(rval)); } return result; } } ``` 使用的时候只要在方法上加上注解就ok ``` @MethodCache() public List<Integer> testInt() { List<Integer> list = new ArrayList<>(); list.add(0); list.add(1); return list; } ``` 利用redis缓存方法执行结果,如果已缓存则将缓存转换为方法出参类型,正常的参数类型都OK的,可以得到方法的结果类型,但是如果是泛型类型的话,比如List和map, 却只能得到List,Map类型,并不能得到确切的泛型类型,比如 ``` List<Map<String,String>> List<User> Map<String, User> ``` 只能解出 ``` List<JSONObject> Map<Object, JSONObject> ``` 因为泛型的类型擦除,所以很难做到,也想过在注解里面传入具体类型,但是也没办法把泛型类型传进来,这个要怎么做,希望大家提供思路!!
-
下载
Understand 3.1.670 Linux 64bit
Understand 3.1.670 Linux 64bit
-
下载
数字电子技术综合设计大作业
数字电子技术综合设计大作业
-
下载
geany官方最新版苹果mac系统dmg安装包
geany官方最新版苹果mac系统dmg安装包
-
博客
window 注册 redis 服务
window 注册 redis 服务
-
下载
C#公交车查询系统源码-C#文档类资源
C#公交车查询系统源码-C#文档类资源
-
博客
scrapy框架基本使用
scrapy框架基本使用
-
博客
笔记:Spring的 IOC 容器比New对象究竟好在哪
笔记:Spring的 IOC 容器比New对象究竟好在哪
-
博客
UI仿应用宝app下载页面源码
UI仿应用宝app下载页面源码
-
博客
基于java的小型超市管理系统系统(含源文件)
基于java的小型超市管理系统系统(含源文件)
-
学院
基于SSM实现的房屋租赁系统【附源码】(毕设)
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
下载
creditcard_demo.csv
creditcard_demo.csv
-
下载
Newtonsoft.Json.dll文件
Newtonsoft.Json.dll文件
-
学院
MySQL 多实例安装 及配置主从复制实验环境
MySQL 多实例安装 及配置主从复制实验环境
-
博客
LeetCode——1337. 矩阵中战斗力最弱的 K 行
LeetCode——1337. 矩阵中战斗力最弱的 K 行
-
学院
MySQL 事务和锁
MySQL 事务和锁
-
下载
员工月度考勤统计表.xls
员工月度考勤统计表.xls
-
学院
【硬核】一线Python程序员实战经验分享(1)
【硬核】一线Python程序员实战经验分享(1)
-
下载
GD32E230C8T6_4SPI_FLASH.rar
GD32E230C8T6_4SPI_FLASH.rar
-
学院
linux基础入门和项目实战部署系列课程
linux基础入门和项目实战部署系列课程
-
博客
基于java的学生信息管理系统(含源文件)
基于java的学生信息管理系统(含源文件)
-
下载
nrf52820的AOA-AOD测向.pdf
nrf52820的AOA-AOD测向.pdf
-
博客
Java好不好学,怎么学才能入门
Java好不好学,怎么学才能入门
-
博客
为R720安装iDRAC Service Module
为R720安装iDRAC Service Module
-
下载
greate_typer.exe
greate_typer.exe
-
学院
【Python-随到随学】 FLask第一周
【Python-随到随学】 FLask第一周
-
博客
FileZilla - 功能强大、免费开源的跨平台 FTP 客户端
FileZilla - 功能强大、免费开源的跨平台 FTP 客户端
-
下载
人大经-济论-坛-R软件数据分析视频教程(初级).doc
人大经-济论-坛-R软件数据分析视频教程(初级).doc
-
博客
长安维修保养记录查询-Api接口
长安维修保养记录查询-Api接口
-
博客
基于java会议管理系统设计(含源文件)
基于java会议管理系统设计(含源文件)
-
下载
wjw9733-H-background-theme-master.zip
wjw9733-H-background-theme-master.zip