两个双引号中间内容过长的话会将第二个双引号后的所有代码都会变绿色,如图。
使用的是默认主题,没有开启任何与代码块相关的插件。
两个双引号中间内容过长的话会将第二个双引号后的所有代码都会变绿色,如图。
使用的是默认主题,没有开启任何与代码块相关的插件。
/**
* 自动填充切面类,实现公共字段自动填充处理逻辑
*/
@Aspect
@Component
@Slf4j
public class AutoFillAspect {
/**
* 切入点
*/
// 拦截器,定义切入点,拦截com.sky.mapper目录下所有标记了 @AutoFill 注解的类和方法
@Pointcut("execution(* com.sky.mapper.*.*(..))") // 这里渲染是正常的
@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill))") // 这里之后的所有代码都变成绿色了
public void autoFillPointcut() {}
/**
* 前置通知
* 在切入点方法执行前执行自动填充逻辑
*/
@Before("autoFillPointcut()")
public void autoFill(JoinPoint joinPoint) {
log.info("开始进行公共字段的自动填充...");
// 获取到当前被拦截的方法上的数据库操作类型
// 通过切入点获取通用的签名对象,强制转换为方法签名,从而获得更多的信息
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
// 获得方法上的注解对象。getMethod()获取到Method对象,getAnnotation()获取指定注解类型(AutoFill.class)的注解对象实例
AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);
OperationType operationType = autoFill.value(); // 获得数据库操作类型
// 获取方法参数--实体对象,这里的参数对应的是execution(* com.sky.mapper.*.*(..))语句中的(..)部分
Object[] args = joinPoint.getArgs();
if (args.length == 0) {
return; // 如果没有参数,直接返回
}
Object entity = args[0]; // 假设第一个参数是实体对象
// 准备赋值的数据
LocalDateTime now = LocalDateTime.now();
Long currentUserId = BaseContext.getCurrentId();
// 根据当前不同的操作类型,为对应的属性通过反射来赋值
if (operationType == OperationType.INSERT) {
// 为4个公共字段赋值
try {
// getClass()获取当前实体对象的运行时类,getDeclaredMethod()获取指定名称和参数类型的方法
Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class); // 设置创建时间
Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class); // 设置创建人
Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); // 设置修改时间
Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); // 设置修改人
// 通过反射为对象属性赋值
setCreateTime.invoke(entity, now); // 设置创建时间
setCreateUser.invoke(entity, currentUserId); // 设置创建人
setUpdateTime.invoke(entity, now); // 设置修改时间
setUpdateUser.invoke(entity, currentUserId); // 设置修改人
} catch (Exception e) {
e.printStackTrace();
}
} else if (operationType == OperationType.UPDATE) {
// 为2个公共字段赋值
try {
Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); // 设置修改时间
Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); // 设置修改人
// 通过反射为对象属性赋值
setUpdateTime.invoke(entity, now); // 设置修改时间
setUpdateUser.invoke(entity, currentUserId); // 设置修改人
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。
记录并分享人生的经历。
你听到信仰的声音了么?
持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。
WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。
程序员是从事程序开发、程序维护的专业人员。
小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。
由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
我来 wolai:不仅仅是未来的云端笔记!
Communication channel for makers and users.
面试造航母,上班拧螺丝。多面试,少加班。
FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。
Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
一些有用的避坑指南。
有点意思就行了
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。
C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
确认过眼神后的灵魂连接,站在链在!
互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。
WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于