???????Դ??
还在编写无聊枯燥又难以维护的POJO吗?洁癖者的春天在哪里?请看Lombok!在过往的美化美化Java项目中,充斥着太多不友好的插件插件代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,源码源码math net 源码又影响着代码的美化美化美观,Lombok应运而生。插件插件
首先说明一下:任何技术的源码源码出现都是为了解决某一类问题的,如果在此基础上再建立奇技*巧,美化美化不如回归Java本身。插件插件应该保持合理使用而不滥用。源码源码
Lombok的美化美化使用非常简单,下面我们一起来看下:
1)引入相应的插件插件maven包:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1..</version><scope>provided</scope></dependency>Lombok的scope=provided,说明它只在编译阶段生效,源码源码不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。
2)添加IDE工具对Lombok的支持:
IDEA中引入Lombok支持如下:
点击File--Settings设置界面,安装Lombok插件:
点击File--Settings设置界面,开启AnnocationProcessors:
开启该项是为了让Lombok注解在编译阶段起到作用。
Eclipse的Lombok插件安装可以自行百度,也比较简单,值得一提的是,由于Eclipse内置的编译器不是Oraclejavac,而是eclipse自己实现的EclipseCompilerforJava(ECJ).要让ECJ支持Lombok,需要在eclipse.ini配置文件中添加如下两项内容:
-Xbootclasspath/a:[lombok.jar所在路径]
-javaagent:[lombok.jar所在路径]
3)Lombok实现原理:
自从Java6起,javac就支持“JSRPluggableAnnotationProcessingAPI”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
Lombok就是一个实现了"JSRAPI"的程序。在使用javac的过程中,它产生作用的具体流程如下:
javac对源代码进行分析,生成一棵抽象语法树(AST)
javac编译过程中调用实现了JSR的Lombok程序
此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树(AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
javac使用修改后的抽象语法树(AST)生成字节码文件
4)Lombok注解的使用:
POJO类常用注解:
@Getter/@Setter:作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。
packagecom.trace;importlombok.AccessLevel;importlombok.Getter;importlombok.Setter;/***CreatedbyTraceon/5/.<br/>*DESC:测试类*/@SuppressWarnings("unused")publicclassTestClass{ publicstaticvoidmain(String[]args){ }@Getter(value=AccessLevel.PUBLIC)@Setter(value=AccessLevel.PUBLIC)publicstaticclassPerson{ privateStringname;privateintage;privatebooleanfriendly;}publicstaticclassAnimal{ privateStringname;privateintage;@Getter@Setterprivatebooleanfunny;}}在Structure视图中,可以看到已经生成了getter/setter等方法:
编译后的代码如下:[这也是传统Java编程需要编写的样板代码]
////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernflowerdecompiler)//packagecom.trace;publicclassTestClass{ publicTestClass(){ }publicstaticvoidmain(String[]args){ }publicstaticclassAnimal{ privateStringname;privateintage;privatebooleanfunny;publicAnimal(){ }publicbooleanisFunny(){ returnthis.funny;}publicvoidsetFunny(booleanfunny){ this.funny=funny;}}publicstaticclassPerson{ privateStringname;privateintage;privatebooleanfriendly;publicPerson(){ }publicStringgetName(){ returnthis.name;}publicintgetAge(){ returnthis.age;}publicbooleanisFriendly(){ returnthis.friendly;}publicvoidsetName(Stringname){ this.name=name;}publicvoidsetAge(intage){ this.age=age;}publicvoidsetFriendly(booleanfriendly){ this.friendly=friendly;}}}@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。
@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode
@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。centos7 源码
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor:作用于类上,用于生成构造函数。有staticName、access等属性。
staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。
@NoArgsConstructor:生成无参构造器;
@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;
@AllArgsConstructor:生成全参构造器。
编译后结果:
publicstaticclassPerson{ @NonNullprivateStringname;privateintage;privatebooleanfriendly;publicStringtoString(){ return"TestClass.Person(name="+this.getName()+",age="+this.getAge()+")";}@NonNullpublicStringgetName(){ returnthis.name;}publicintgetAge(){ returnthis.age;}publicbooleanisFriendly(){ returnthis.friendly;}publicvoidsetName(@NonNullStringname){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;}}publicvoidsetAge(intage){ this.age=age;}publicvoidsetFriendly(booleanfriendly){ this.friendly=friendly;}privatePerson(){ }privatestaticTestClass.Personof(){ returnnewTestClass.Person();}@ConstructorProperties({ "name"})Person(@NonNullStringname){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;}}@ConstructorProperties({ "name","age","friendly"})publicPerson(@NonNullStringname,intage,booleanfriendly){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;this.age=age;this.friendly=friendly;}}}@Data:作用于类上,是以下注解的集合:@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor
@Builder:作用于类上,将类转变为建造者模式
@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:
其他重要注解:
@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象
编译后结果如下:
是不是简洁了太多。
@SneakyThrows:可以对受检异常进行捕捉并抛出,可以改写上述的main方法如下:
@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大。
作者:LiWenD正在掘金
哪些是值得在Cydia越狱商店下载的插件源码?
对于iPhone越狱用户,Cydia商店无疑是一片宝藏地。众多强大的插件源码等待挖掘,但选择哪款合适呢?别担心,让我们一起探索五个值得安装的插件源码。1. 大老板源</
作为正版插件的殿堂,大老板源是许多付费插件的首选之地,确保了你的手机安全且功能丰富。2. Cydia/Telesphoreo</
这个源码支持ACF2补丁下载,对于需要进行越狱操作的用户,借助PP手机助手源码,安装过程更加顺畅。3. ModMyi.com</
这个源主要提供美化插件,帮助你个性化你的手机界面,如和视频编辑。4. repo.ultrasn0wn</
ultrasn0w虽技术性强,但并非大众所需,适合少数技术爱好者。5. ZodTTDMacCiti</
虽有音乐和主题下载功能,但因其便捷度不高,许多用户会选择其他途径获取。必备插件源推荐:</
卫逢源</- apt.feng.com源码功能全面,几乎涵盖越狱所需的一切。 威锋精品来源</- 类似Repo.feng.com的强大插件源,越狱必备。 PP手机助手源码</- 尽管插件不多,但用于软件重编,是分销系统 .net源码新手的好选择。 原创精品来源</- 专为中文用户设计,提供最新、易用的插件。黑客iPhone插件源</
强烈推荐,因其快速更新且保证质量,为你的手机带来更多可能性。 在Cydia的海洋中,挑选适合你的插件源是提升手机体验的关键步骤。安装这些推荐的源码,将为你的越狱之旅打下坚实基础。探索并安装,让iPhone 的潜力无限释放。腾讯插件化—Shadow源码
腾讯插件化框架Shadow介绍及源码解析 Shadow是一个由腾讯自主研发的Android插件框架,经过线上亿级用户量的检验,其在插件技术领域展现出不俗的实力。Shadow不仅开源分享了关键代码,还全面分享了上线部署所需的设计方案。 与市面上其他插件框架相比,Shadow在技术特点上主要体现在:支持特性编译与开发环境准备:建议使用最新稳定版本的Android Studio,推荐打开工程并选择sample-app或sample-host模块直接运行,体验不同安装情况下的运行效果。
代码结构清晰:所有代码集中在projects目录下的三个子目录中,sample目录为体验Shadow的最佳环境,详细信息可参考README文档。
插件加载与启动流程解析 插件加载是Shadow框架的核心,从loadPlugin作为起点,通过一系列步骤实现插件的动态加载与启动。包括但不限于:本地启动顺序:重点关注启动流程的第一、二步,回溯整个过程最终调用Plugin Manager的DynamicPluginManager.enter方法。
跨进程调用与Activity加载:调用mDynamicPluginLoader.callApplicationOnCreate方法执行插件加载,之后通过FastPluginManager.convertActivityIntent方法启动Activity。
Activity与Service加载机制 在Activity与Service加载机制上,Shadow采用与Android系统自身一致的实现方式:通过修改ClassLoader的parent属性,插入DexClassLoader实现插件apk的加载与Activity的实例化。具体步骤包括:new一个DexClassLoader加载插件apk,从插件ClassLoader中load指定的插件Activity名字,newInstance之后强转为Activity类型使用。 Shell Activity复用与资源管理 为了解决资源复用与访问问题,Shadow通过代理Activity的方式,通过Intent的参数确定构造哪个Activity,令壳子Activity能够复用,实现资源的隔离管理。此外,对同名View与资源的处理也非常关键,通过自定义类加载器与AOP技术,解决此类问题。 组件调用与优化 对于Service、壹品装饰源码Content Provider与Broadcast Receiver的调用,Shadow提供了优化方案,如通过ShadowContext启动Service、使用ShadowAcpplication注册静态广播等。 总结与学习建议 本文详细解析了插件化框架Shadow的源码与实现机制,深入探讨了其解决插件加载、Activity启动、资源管理等问题的策略。对于深入理解Android插件化技术,实现高效、稳定的插件化解决方案具有重要参考价值。建议对Android核心技术感兴趣的开发者深入阅读《Android核心技术手册》,了解更多关于插件化、热修复等技术的详细内容。成品网站w灬源码三叶草下载:网络世界中的通用秘籍,享受便利体验
成品网站w灬源码三叶草下载我们时常需要一些通用秘籍来享受便利体验。而成品网站w灬源码三叶草下载,就像是这个世界的一把通用钥匙,为我们打开了无尽可能性的大门。
当我们面对需要建立网站的需求时,往往会陷入烦恼。有些人可能会选择从零开始编写代码,这需要大量的时间和精力,而且容易出错。而有了成品网站w灬源码三叶草下载,一切变得轻松起来。
这个神奇的源码三叶草提供了丰富的模板和功能,无论是个人网站、企业网站还是电子商务网站,都可以轻松实现。只需简单的修改和定制,就能打造出专属于自己的网站。
更重要的是,成品网站w灬源码三叶草下载不仅仅是一个网站模板,它还提供了丰富的插件和工具,帮助我们轻松实现各种功能,比如SEO优化、社交分享、在线支付等。这让我们的网站不仅外观漂亮,而且功能强大,能够更好地满足用户的需求。
在使用成品网站w灬源码三叶草下载的过程中,我们还能享受到来自全球开发者的支持和帮助。无论是在官方论坛上提问问题,还是在社交媒体上交流经验,都能够得到及时的解答和支持。这让我们不再孤单,可以和其他网站建设者一起分享经验,搜索功能网站源码共同进步。
成品网站w灬源码三叶草下载为我们在网络世界中探索和创造提供了无尽可能性。它让网站建设变得简单而快捷,让我们能够更专注于网站的内容和用户体验。在这个充满竞争的网络时代,拥有一款优秀的源码三叶草,就像是拥有了一把通往成功的钥匙。
推荐几款IDEA开发必备的经典好用插件,让代码飞起来!
提升IDEA开发体验,高效编写出高质量代码,这些经典好用的插件不容错过! 实用插件篇SonarLint:代码质量守护者,帮助发现并修复潜在漏洞,优化代码。
Maven Helper:简化依赖管理,轻松解决依赖冲突问题。
Alibaba Java Coding Guidelines:遵循编码规范,提升编码效率和项目速度。
Free Mybatis plugin:Mybatis文件间的便捷切换,提高开发效率。
MybatisX:Mybatis-Plus开发神器,自动生成代码并优化代码结构。
GitToolBox:版本管理助手,自动同步代码并显示详细信息。
Grep Console:快速定位日志,简化日志查找。
Translation:英文阅读助手,翻译源码注释,降低语言障碍。
Lombok:简化实体类,减少冗余代码,提高开发效率。
美化插件篇Material Theme UI:提供酷炫主题,美化IDEA界面。
Extra Icons:增强文件类型图标,提升视觉体验。
Background Image Plus:个性化背景设置,增强工作环境。
Code Glance:代码预览区域,全局视野一目了然。
想让IDEA开发更顺手,赶紧试试这些必备插件吧!盘点个提高开发效率和美观性的 VSCode 插件!
VSCode插件集合,提升开发效率与美观性 VSCode是一款功能强大的源代码编辑器,提供了语法高亮、代码自动补全、代码重构等功能,内置命令行工具与Git版本控制,支持多种编程语言与调试功能。本文为您推荐款VScode插件,涉及美观、编程、效率等多个方面,满足不同开发需求。 美观类插件: CodeSnap:轻松生成高分辨率精美代码 :emojisense::为Markdown文档或命令行添加表情,提升编程趣味性 Marquee:改造编程主屏幕,展示新闻、天气等信息 Material Theme:安装不同主题,自定义编辑器外观 Bookmarks:为文件特定行添加书签 Bracket Pair Colorizer:给括号添加不同颜色,区分区块 vscode-icons:更换更好看的文件图标 前端编程类插件: Vetur:为Vue项目提供语法高亮、智能感知等 Auto Close Tag:自动闭合HTML/XML标签 Auto Rename Tag:自动重命名HTML/XML标签 formate: CSS/LESS/SCSS formatter:格式化CSS/LESS/SCSS,增强可读性 Live Server:为静态和动态页面启动本地服务器 Debugger for Chrome:将JS代码调试嵌入Chrome浏览器 C/C++编程类插件: C/C++:为VSCode添加C/C++语言支持,包括IntelliSense和Debugging C++ Intellisense:为C/C++提供智能感知 CMake Tools:为VSCode添加CMake支持与感知 Python编程类插件: Python:为VSCode添加Python语言支持,包括IntelliSense和Debugging Jupyter:为VSCode添加Jupyter Notebook功能 效率类插件: Git Graph:可视化Git提交流程 koroFileHeader:格式化文件头部注释与函数注释 Code Runner:直接运行多种语言代码片段或文件 Better Comments:提供特定类型注释的高亮 CodeTime:分析每天敲代码时间 推荐技术交流群与资源获取方式: 本文建有技术交流群,欢迎进群获取最新优质文章、岗位推荐与互动交流。添加微信号:dkl,备注研究方向、学校/公司与知乎,即可入群。 关注Python与数据挖掘知乎账号与公众号,快速获取最新技术资讯与学习资源。Keil MDK中使用AStyle插件对代码格式美化处理
干货福利,第一时间送达!
摘要:编写代码时,手动调整缩进和{ }使用费时又费力。为了解决这个问题,本文将介绍一款MDK插件—Astyle,它能自动格式化代码,节省时间和提高美观度。
Astyle全称Artistic Style,是一款免费、快速、小型的自动格式化程序,适用于多种编程语言的源代码,包括C、C++、C++/CLI、Objective-C、C#和Java。
官网地址:astyle.sourceforge.net/
下载地址:sourceforge.net/project...
二、保存插件
下载插件包后,将其放置在Keil安装目录下,以防止误删。我的存放路径是:
三、配置MDK
打开Keil软件,在菜单栏中选择Tools > Customize Tools Menu,按照以下步骤操作:
其中Menu Content是自定义的用户命令,名称可自定。以下为两个用户命令的配置:
1.格式化当前
参数配置:(参考他人方法配置)
2.格式化工程
参数配置:(参考他人方法配置)
!E表示当前获得焦点且正在编辑的文件。$E*.c $E*.h代表当前获得焦点且正在编辑文件所在目录下所有.c和.h文件。使用Astyle默认格式格式化文件,也可自定义格式,参考Astyle官网帮助文档。
四、实际效果演示
使用插件前,需先保存文件,否则不会生效。
五、主题美化
最后,分享一个MDK主题美化方法。如觉得以下主题不错,可参考以下步骤:将global.prop和global.prop.de两个文件复制到Keil安装目录UV4文件下,替换原来的文件即可。
End
IDA F5 增强插件,还我源代码(一)
许多年以后,面对IDA的F5,面对着曾经的荣光与失落,老李老板的故事被追忆。在那个时代,App的名字还是exe和com,而Asm程序员的夜晚,是面对黑洞洞的屏幕,用DEBUG敲下代码的不眠之夜。随着时代的变迁,App改名,C程序员狂欢,Asm程序员黯淡。瑞士同行的ollvm让混淆达到了新高度,而IDA F5,成了对抗这一挑战的希望。
如今,ollvm已经进入了第年,混淆技术愈发强大,而IDA F5以其独特的魅力再次成为焦点。它像是当年的小甜甜,现在则是牛夫人,每一次变身都充满着挑战与机遇。
对于使用IDA 7.x+的用户,有一个简单的步骤可以尝试。只需将d文件夹和D.py文件放置在C:\fenfei\IDAPro7_5\plugins目录下,然后运行D.py,使用Ctrl-Shift-D进行操作,选择配置文件default_instruction_only.json。点击”Start“按钮,然后F5,奇迹即将显现。尽管结果可能没有那么惊艳,但至少能辨认出其本质。
对于那些在配置好D后仍无法获得预期效果的用户,他们可能会遇到IDA F5的缓存问题。解决方法并非立即可见,但通过重新启动IDA或尝试等效的方法,可以清除缓存并让D的增强效果再次显现。
IDA Microcode的引入,为汇编代码到C代码的转换过程提供了一个层次,使得这一过程更加细致和可定制。它就像是烹饪米饭,不同成熟度代表了代码转换的不同阶段,每一步都能添加自己的“私货”,使得最终的C代码更加“可口”。Microcode的深度探讨为读者提供了一种新的视角,通过github资源,可以更深入地了解这一过程。
D的原理在于通过指令替换和流程重组来对抗混淆。它将混淆后的代码抽象为算式,利用AstNode对象进行表示,然后通过模式匹配进行替换。流程重组则寻找主分发器和真实块,重组正确的流程,这一过程在d/optimizers/flow中实现。
动手实践是学习的最好方式,通过添加额外的优化规则,可以显著提升D的性能。小学数学知识在这里扮演着关键角色,而github资源提供了强大的工具,让这一过程变得既有趣又有效。
总结而言,学习逆向工程技巧和思路是不断进化的,没有一劳永逸的方法。IDA F5的挑战与机遇并存,它与攻击者的对抗是一场永无止境的游戏。在这一过程中,技术的迭代与人的智慧同样重要,没有单一的决定性因素。而IDA社区的资源与知识,为每一个寻求进步的人提供了丰富的支持。
Vue—关于插件(源码级别的插件分析+实践)
Vue插件的原理基于Vue的`use`方法,该方法接收一个函数或者提供`install`方法的对象作为参数,如果传入的参数是函数,这个函数会被当作`install`方法。在Vue 2.6.版本中,`use`方法内部使用`initUse`函数给Vue添加了一个静态方法`use`。以vuex为例,它暴露了一个`install`方法,通过`Vue.use(vuex)`来安装插件。vuex的`install`函数会调用`applyMixin`函数,并将Vue传递过去。`applyMixin`函数在Vue 2.x版本中会直接使用`Vue.mixin`来扩展功能,通过在组件的`beforeCreate`钩子中初始化vuex插件。
在Vue中使用混入(mixin)是一种设计模式,可以轻松地被子类继承功能,目的是实现函数复用。Vue中也应用了这一设计模式,通过`Vue.mixin`可以用来分发可复用逻辑。混入可以分为全局混入和局部混入,全局混入会影响所有的Vue实例,如果组件中与mixin中具有同名的属性,会进行选项合并,除了生命周期外,其它的所有属性都会被组件自身的属性覆盖。使用混入可以节省代码量,类似于类继承。
要自己实现一个提示框插件,可以通过`this.$notify()`进行调用,并且可以传入自定义模板。创建一个Vue工程,在`src`目录下新建`plugin`目录,然后创建一个`notify`目录,新建`index.js`和`Notify.vue`。在`index.js`中,引入`Notify.vue`组件,并通过`install`方法中注入的Vue来完成功能。实例挂载之后才可以访问`$el`选项,可以通过`Vue.use`来使用插件,然后在App.vue中验证功能是否正常。要实现传入模板并且显示出来,可以通过`$mount` API手动挂载一个实例,并在调用`$notify`方法时将挂载的元素插入到文档中。通过创建Vue组件,将DOM、JS、Style都创建好,最后调用`$notify`方法将组件插入到页面中。要实现传入模板,可以使用`v-html`指令来插入模板,并在Notify.vue中新增接收参数的方法。在App.vue中传递一段模板,页面上操作的效果为显示提示框,两秒后消失。
哪些值得安装的iPhone插件源推荐?
掌握越狱手机的插件宝藏:五大推荐源码 对于越狱后的iPhone,Cydia的插件商店就像一座宝库,藏着无数功能强大的工具。面对众多选择,如何挑选适合的插件源呢?别急,接下来将为您揭示五个值得信赖的插件源,助您打造个性化手机体验。 1. 大老板来源 作为正版插件的聚集地,大老板来源是众多付费插件的首选,确保了您的越狱设备安全和功能的完整性。 2. Cydia/Telesphoreo 对于补丁安装,Cydia/Telesphoreo是个关键,特别是ACF2补丁,可以通过PP手机助手源码轻松获取。 3. 美化大师:ModMyi.com 这个源专注于美化插件,如和视频的个性化,让你的手机焕发新颜。 4. 技术重地:repo.ultrasn0wn 虽然ultrasn0w技术性强,普通用户较少涉及,但对于高级定制者,这里可能藏着你需要的工具。 5. ZodTTDMacCiti:音乐与主题下载 尽管ZodTTDMacCiti的使用体验一般,但音乐和主题下载的便捷性吸引了许多寻找特色资源的用户。 6. 安全实用:apt.feng.com与威锋精品来源 apt.feng.com和Repo.feng.com源提供强大的越狱支持,几乎覆盖所有越狱需求,不容错过。 7. PP手机助手源码:便捷软件重置 尽管插件不多,但这个源在越狱后软件重置时非常实用,新手也常添加。 8. 原创精品:中国版插件源 中国版插件源专为越狱后的中国用户打造,操作简便,是最新插件的首选之地。 9. 黑客iPhone:高质量更新 黑客iPhone的插件更新迅速,质量上乘,不容错过。 在众多插件源中,选择合适的至关重要。通过Cydia,您可以下载适合自己需求的插件,让手机更加个性化。希望这份推荐能帮助您在越狱之旅中顺利前行,享受更多定制乐趣。 探索更多,尽在越狱世界2024-12-28 23:58
2024-12-28 23:50
2024-12-28 23:28
2024-12-28 23:07
2024-12-28 22:40