注解:EnableDimEnhance

package com.comma.teeth.enhance.dim.annotation;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** <p>** </p>** @author: GoslingWu* @date: 2022-03-08*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnableDimEnhance {boolean enable() default true;}

AOP:DimEnhanceAop

package com.comma.teeth.conf;import com.comma.teeth.common.vo.Paging;
import com.comma.teeth.enhance.dim.annotation.EnableDimEnhance;
import com.comma.teeth.enhance.dim.service.DimEnhanceService;
import lombok.Data;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Collection;/*** <p>** </p>** @author: GoslingWu* @date: 2022-03-08*/
@Data
@Slf4j
@Aspect
@Component
public class DimEnhanceAop {/*** 切点 全部service方法*///private static final String POINTCUT = "execution(public * com.comma.teeth.*.service.impl..*.*(..))";@Autowiredprivate DimEnhanceService dimEnhanceService;@Pointcut("@annotation(com.comma.teeth.enhance.dim.annotation.EnableDimEnhance)")public void dimEnhanceAspect() {}@AfterReturning(pointcut = "dimEnhanceAspect()", returning = "result")public void afterReturning(JoinPoint joinPoint, Object result) {if (result == null) {return;}// 方式1:service方法上开启自动注入{// 获取注解MethodSignature signature =(MethodSignature) joinPoint.getSignature();// 获取当前方法被注解注释的注解对象EnableDimEnhance annotation =signature.getMethod().getAnnotation(EnableDimEnhance.class);if (annotation.enable()) {if (result instanceof Paging) {Paging iPage = (Paging) result;//通过反射获取指定属性上的注解,@SysDictField(code="1",valueFieldName="typeName")去自动注入dimEnhanceService.autoFillValue(iPage.getRecords());} else if (result instanceof Collection) {dimEnhanceService.autoFillValue((Collection) result);} else{dimEnhanceService.autoFillValue(result);}}}// 方式2:返回实体类上开启自动注入/*{if (result instanceof Paging) {Paging iPage = (Paging) result;List records = iPage.getRecords();if(CollectionUtil.isNotEmpty(records)){Object o = records.get(0);EnableDimEnhance annotation = o.getClass().getAnnotation(EnableDimEnhance.class);if(annotation.enable()){dimEnhanceService.autoFillValue(iPage.getRecords());}}} else {EnableDimEnhance annotation = result.getClass().getAnnotation(EnableDimEnhance.class);if(annotation.enable()){dimEnhanceService.autoFillValue(result);}}}*/log.info("DimEnhanceAop-------afterReturning:{}", result);}}

SysDictField

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SysDictField {String code();/*** 用来指定自动填充时的字段,valueField必须是字符串类型。* <p>* 默认为:注解所在字段名 + "Name"** @return .*/String valueFieldName() default "";}
@Data
@Builder
public class CounselorFollowRecordQueryVo implements Serializable{private static final long serialVersionUID = 1L;@SysDictField(code = SysDictConstant.COMMUNICATION, valueFieldName = "typeName")@ApiModelProperty(value = "跟进方式id")private Integer typeId;@ApiModelProperty(value = "跟进方式")private String typeName;
}

使用

@Override
//使用注解标识,会进入AOP,把Vo对象中的@SysDictField属性标识指定的valueFieldName名称填充进去,通过反射(sql中typeId是要查询出来的,反射只填充name)
//我们有些表中有crrentUserId,一样可以通过自定义一个@UserField来实现UserName的填充
@EnableDimEnhance
public Paging<CounselorFollowRecordQueryVo> getCounselorFollowRecordPageList(CounselorFollowRecordQueryParam param) throws Exception {Page page = setPageParam(param, OrderItem.desc("id"));IPage<CounselorFollowRecordQueryVo> iPage = counselorFollowRecordMapper.getCounselorFollowRecordPageList(page, param, labelSearchParam);return new Paging<>(iPage);
}

AOP通过开启注解方式自动注入值相关推荐

  1. IOC操作Bean管理注解方式(注入属性@Autowired和Qualifier)

    目录 IOC操作Bean管理注解方式(注入属性@Autowired.@Qualifier和@Resource) 1.基于注解方式实现 属性注入 (1)@Autowired:根据属性类型进行自动装配 第 ...

  2. Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面

    初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...

  3. spring的AOP配置之@注解方式

    AOP配置(注解) spring的AOP概念在spring的AOP配置之XML方式这骗博客中详细介绍了,这篇博客就直接开始介绍AOP配置需要那些注解 AOP注解详解 @Aspect 标志为一个切面类 ...

  4. [Spring5]IOC容器_Bean管理注解方式_注入属性@Autowired_@Qualified_@Resource_@Value

    基于注解方式实现属性注入 (1)@AutoWired:根据属性类型进行自动装配 第一步 把service和dao对象创建,在service和dao类添加创建对象注解 第二步 在service注入dao ...

  5. 初步学习Spring Aop使用之注解方式

    前言: 这里就主要演示Spring中Aop使用注解是怎么使用,如果需要了解更多Aop相关概念,可查看相关资料的介绍 一.项目目录 [标记文件为主要文件] 二.各个文件的代码 AopServer.jav ...

  6. spring源码解析(二) @Autowired自动注入过程

    1.依赖注入到底有几种?两种.四种.五种? 两种: 手动:set(byType.byName).构造器 自动:xml中:set.构造器 autowired注解中:set.属性.构造器 重点不在于到底有 ...

  7. 基于spring自动注入及AOP的表单二次提交验证

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在网上闲逛,看到了几个关于spring的token二次提交问题,受到不少启发,于是自己动手根据自己公司的项目框架结构,制 ...

  8. SpringBoot学习——@Autowired自动注入报:could not be found问题的理解和解决方案

    微服务应用程序中,我们会通过Java后台的方式发送http请求并调用其他注册在Spring Cloud Eureka server上的微服务,之前我们可能会手动封装一个Http发送请求类,然后通过其中 ...

  9. 【Spring】Spring 自动注入(autowire)详解

    1.概述 转载:添加链接描述 2. 手动注入的不足 [Spring]Spring 依赖注入之手动注入 上篇文章中介绍了依赖注入中的手动注入,所谓手动注入是指在xml中采用硬编码的方式来配置注入的对象, ...

最新文章

  1. mysql blob key length_mysql – 没有密钥长度的密钥规范中使用的BLOB / TEXT列’bestilling’...
  2. linux eclipse java_从Linux终端编译运行Eclipse Java项目
  3. 程序员应该知道的那些画图工具-第一期
  4. PHP中header的用法
  5. [渝粤教育] 重庆大学 电子商务 参考 资料
  6. 软件测试基础课程学习笔记1--软件测试简介
  7. Facebook 开源 3D 深度学习函数库 PyTorch3D,也可用于二维场景
  8. ShareX(截图工具) 绿色版,功能异常强大
  9. 相关系数excel_如何求组内相关系数ICC?(应用篇)
  10. 谷歌chrome浏览器被hao123 360等劫持问题解决方案
  11. iexplore.exe免费下载
  12. linux 命令:yum 详解
  13. 1058:求一元二次方程
  14. 糖糖班趣事之棒棒糖篇
  15. git-cz git commit 定制提交规范
  16. 波司登少了“鹅胸前的四片毛”
  17. pandas操作大全
  18. 步进电机原理及其使用说明
  19. Python字符串编码检测
  20. VC编程实现色彩空间RGB与XYZ相互转换

热门文章

  1. 男女洗澡前后区别,太形象了!
  2. htop 和 bashtop 的一些不足
  3. Linux8-bash shell的基础特性:globbing、IO重定向及管道
  4. QIIME 2教程. 32如何写方法和引用Citing(2021.2)
  5. QIIME 2教程. 25可用和开发中插件AvailableFuturePlugins(2021.2)
  6. MPB:扬州大学王梦芝组-反刍动物瘤胃原虫18S rRNA测序分析技术
  7. 你所不知道的SCI, SCIE, 和ESCI
  8. Nature:拟南芥微生物组功能研究1培养组学—高通量细菌分离培养鉴定
  9. matlab中sinks,MATLAB Simulink模块库详解(二)Sinks篇
  10. R语言使用persp函数绘制三维图像实战(3D):自定义3D图、图像旋转、添加轴标签