discoverer

自定义注解!绝对是程序员装逼的利器!!

一笑奈何 提交于 2020-11-22 13:56:17
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 315 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。 在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。 但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一个大大的功臣。 所以, 在我看来,会使用自定义注解 ≈ 好的程序员。 那么,本文,就来介绍几个,作者在开发中实际用到的几个例子,向你介绍下如何使用注解来提升你代码的逼格。 基本知识 在Java中,注解分为两种,元注解和自定义注解。 很多人误以为自定义注解就是开发者自己定义的,而其它框架提供的不算,但是其实上面我们提到的那几个注解其实都是自定义注解。 关于"元"这个描述,在编程世界里面有都很多,比如"元注解"、"元数据"、"元类"、"元表"等等,这里的"元"其实都是从meta翻译过来的。 一般我们把

基于自定义注解和SpringEL表达式的分布式锁实现

无人久伴 提交于 2020-08-17 21:43:40
需求 1、项目中不可避免的需要使用分布式保证幂等。所以一个简单可靠,易用的工具提上日程。 2、演进过程 最开始使用try finally 块实现。代码臃肿。还要时刻记得释放。 改用回调方式封装锁的获取和释放,但是依然臃肿,需要实现成功和获取锁失败的回调方法。然而获取锁失败几乎都做的一样的事。 使用注解,代价就是使用范围是整个方法。需要自己确认好了使用范围。另外第一版不支持Spring EL。想使用参数值做锁实在太麻烦。 改进注解,使用spring EL引擎。提供强大的数据获取功能。并且对返回值使用调用静态方法和创建新对象十分友好。 我们并没有直接使用spirng EL的所有语法。而是选择包装了一下,因为大家对Spring EL认识参差不齐。 demo: @LockMethod ( value = { @ExtractParam ( paramName = "accountInfo" , fieldName = "accountId" ) , @ExtractParam ( paramName = "order" , fieldName = "id" ) , @ExtractParam ( paramName = "uid" ) } , formatter = "lockTest:%s:%s:%s" , failureExpression = "new java.util

Qt开源作品2-视频流播放vlc内核

耗尽温柔 提交于 2020-04-26 09:39:52
一、前言 上一个作品是ffmpeg内核做的,由于ffmpeg太过于强大,很多初学者会看的云里雾里懵逼状态,也有很多用户只需要一个简单的播放视频流即可,根本不需要涉及到负责的解码转码等,于是vlc就上场了,他就是直接对ffmpeg做了深层次的封装,提供了友好的接口,具备这种境界的还有个mpv之类的,mpv相比于vlc还更牛逼在库文件就一个,貌似是封装成了静态库,不想vlc还要带一堆的动态库文件和插件文件,当然vlc的简单在于只需要几行代码就可以撸起来,让初学者看到效果很重要,很兴奋,可以更快速的进行下一步的编码中,体验编码的乐趣。 二、代码思路 第一步:引入vlc的头文件 # ifdef __cplusplus extern "C" { # endif #ifdef vlc3 #include <libvlc.h> #include <libvlc_renderer_discoverer.h> #include <libvlc_media.h> #include <libvlc_media_player.h> #include <libvlc_media_list.h> #include <libvlc_media_list_player.h> #include <libvlc_media_library.h> #include <libvlc_media_discoverer.h>