首页 文章 精选 留言 我的

精选列表

搜索[SQL注入],共10000篇文章
优秀的个人博客,低调大师

Mix XDI V1.1 - Golang DI、IoC 依赖注入容器

OpenMix 出品:https://openmix.org Mix XDI DI、IoC 容器 DI, IoC container Overview 一个创建对象以及处理对象依赖关系的库,该库可以实现统一管理依赖,全局对象管理,动态配置刷新等。 Installation go get github.com/mix-go/xdi Quick start 通过依赖配置实例化一个单例 package main import ( "github.com/mix-go/xdi" ) type Foo struct { } func init() { obj := &xdi.Object{ Name: "foo", New: func() (interface{}, error) { i := &Foo{} return i, nil }, } if err := xdi.Provide(obj); err != nil { panic(err) } } func main() { var foo *Foo if err := xdi.Populate("foo", &foo); err != nil { panic(err) } // use foo } Reference 依赖配置中引用另一个依赖配置的实例 package main import ( "github.com/mix-go/xdi" ) type Foo struct { Bar *Bar } type Bar struct { } func init() { objs := []*xdi.Object{ { Name: "foo", New: func() (interface{}, error) { // reference bar var bar *Bar if err := xdi.Populate("bar", &bar); err != nil { return nil, err } i := &Foo{ Bar: bar, } return i, nil }, }, { Name: "bar", New: func() (interface{}, error) { i := &Bar{} return i, nil }, NewEverytime: true, }, } if err := xdi.Provide(objs...); err != nil { panic(err) } } func main() { var foo *Foo if err := xdi.Populate("foo", &foo); err != nil { panic(err) } // use foo } Refresh singleton 程序执行中配置信息发生变化时,可以刷新单例的实例 obj, err := xdi.Container().Object("foo") if err != nil { panic(err) } if err := obj.Refresh(); err != nil { panic(err) } License Apache License Version 2.0,http://www.apache.org/licenses/

优秀的个人博客,低调大师

静态注入修改Java代码的一种方法

在Java开发中我们经常用Spring的AOP方式动态来拦截类方法的执行,做一些公共处理,比如日志、异常等等,这里我要介绍一种静态修改Java代码的方法,这种方法经常被用在破解一些Java工具上面,通过启动时静态修改Java代码,修改里面的处理逻辑达到破解的目的,当然这种方式也可以用于不适合使用Spring的项目中,比如比较有名的监控系统pinpoint就是通过此方式来记录方法的执行时间。1、在Maven中引入依赖包: <properties> <aspectj.version>1.8.13</aspectj.version> <javassist.version>3.24.1-GA</javassist.version> &

优秀的个人博客,低调大师

阿里云Kubernetes容器服务Istio实践之Sidecar自动注入

概述 在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服务;并且通过一个官方示例演示了如何部署应用到上述Istio环境中,演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。 回顾这个系列文章请参考:阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio阿里云Kubernetes Service Mesh实践进行时(3): 智能路由阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪阿里云Kubernete

优秀的个人博客,低调大师

[Android]Gradle 插件 DiscardFilePlugin(class注入&清空类和方法)

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6732128.html Android Gradle 插件 DiscardFilePlugin(清空类和方法) An android gradle plugin for discard class or method in compile time. 用于在编译构建时期忽略清空类和方法的一个Android Gradle插件。 Github: https://github.com/wangjiegulu/DiscardFilePlugin 1.1 使用场景 在实际的生产中,我们总是会在我们的app中增加一些调试的工具,比如在debug模式下加入DebugPanelActivity(调试面板工具页面,提供比如“切换服务器”等操作)。我们需要在正式上线的release版本中清空相关类和方法,或者修改boolean isProductionEnvironment()方法,让它永远返回true,以此来避免上线之后调试相关代码通过反编译等手段暴露出来。 1.2 @Discard注解 1.2.1 Target ElementType.METHOD: 表示清空方法中的代码,编译过程中该方法中代码被清空。 ElementType.TYPE: 表示清空类,其实是清空类中的所有方法。 1.2.2 参数 1.2.2.1 apply apply参数规范:key==exceptValue 表示当key==exceptValue时,Discard才会生效,才会真正在编译时去对方法或者类进行清空。因此可以在每个方法或者类中去进行不同的配置,在不同状态下通过如下方式对不同方法进行Discard: @Discard(apply = "test1==true") public void testMethod_1() { System.out.println("testMethod_1..."); } @Discard(apply = "test2==true") public void testMethod_2() { System.out.println("testMethod_2..."); } 使用gradle assembleDebug -Ptest1=true -Ptest2=false来构建时,testMethod_1()方法会被discard,而testMethod_2()不会被discard。构建完毕反编译class结果如下: @Discard(apply = "test1==true") public void testMethod_1() { } @Discard(apply = "test2==true") public void testMethod_2() { System.out.println("testMethod_2..."); } 1.2.2.2 srcCode 替换方法的方法体,如果不设置,默认discard方法实现: 返回类型为void: discard后方法体为{} 返回类型为原始数据类型:discard后方法返回默认值,比如{ return 0; } 返回类型为类对象时: discard后方法返回为{ return null; } 可以如下填写具体的方法体代码块: @Discard(srcCode = "{super.onCreate($1); System.out.println(\"this: \" + $0);}") protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); usernameEt = (EditText) findViewById(R.id.activity_main_username_et); passwordEt = (EditText) findViewById(R.id.activity_main_password_et); setTestAccount(); } discard之后的class反编译代码如下: @Discard( srcCode = "{super.onCreate($1); System.out.println(\"this: \" + $0);}" ) protected void onCreate(Bundle var1) { super.onCreate(var1); System.out.println("this: " + this); } 方法的$0表示当前对象this,方法参数依次为$1, $2, $3...,详细文档参考这里 1.2.2.3 makeClassNames 可以在这里指定具体的类名,在discard时对未在classPath的类进行make。不常用,可以省略。 1.2.2.4 enable 表示该方法或者类的discard是否开启,默认为true,比较典型的场景为,在类上面增加@Discard对该类所有方法进行discard,但是需要某个方法不discard,这时可以使用@Discard(enable = false)来对方法进行排除在discard范围外。 1.3 使用方式 Gradle(Check newest version): build.gradle in Project: buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath 'com.github.wangjiegulu:discardfile:x.x.x' } } build.gradle in app or library: apply plugin: 'com.github.wangjiegulu.plg.discardfile' dependencies { compile 'com.github.wangjiegulu:discardfile-api:x.x.x' } 1.3.1. build.gradle // 使用插件 apply plugin: 'com.github.wangjiegulu.plg.discardfile' // 配置需要修改的类所属在那些包下 discard { includePackagePath 'com.wangjie.plg.discardfile.sample.ui', 'com.wangjie.plg.discardfile.sample.include' excludePackagePath 'com.wangjie.plg.discardfile.sample.exclude'/*, 'com.wangjie.plg.discardfile.sample.ui.MainActivity'*/ } 1.3.2. 使用@Discard注解 创建自定义apply配置(publish和disable两种apply配置): public class ApplyConstants { public static class Publish { private static final String PUBLISH = "publish"; public static final String _TRUE = PUBLISH + "==true"; } public static class DISABLE { private static final String DISABLE = "disable"; public static final String _TRUE = DISABLE + "==true"; } } 在需要清空的类上添加@Discard注解,apply = ApplyConstants.Publish._TRUE表示只有在publish=true的情况下,才会执行Discard。 @Discard(apply = ApplyConstants.Publish._TRUE) public class IncludeClassC { /** * 因为IncludeClassC类增加了`@Discard`注解,所以该方法也会被discard。 */ public void onIncludeMethodC() { System.out.println("onIncludeMethodC..."); } /** * 替换该方法的实现为:{System.out.println("onIncludeMethodC_2... injected!");} */ @Discard(apply = ApplyConstants.Publish._TRUE, srcCode = "{System.out.println(\"onIncludeMethodC_2... injected!\");}") public void onIncludeMethodC_2() { System.out.println("onIncludeMethodC_2..."); } /** * 替换该方法永远返回true */ @Discard(apply = ApplyConstants.Publish._TRUE, srcCode = "{return true;}") public boolean onIncludeMethodC_3() { System.out.println("onIncludeMethodC_3..."); return false; } /** * 因为IncludeClassC类增加了`@Discard`注解,所以该方法也会被discard。 */ public int onIncludeMethodC_4() { System.out.println("onIncludeMethodC_4..."); return 100; } /** * 由于使用了`@Discard`注解进行显式地声明禁用了本地的discard,所以该方法不会被discard */ @Discard(apply = ApplyConstants.Publish._TRUE, enable = false) public String onIncludeMethodC_5() { System.out.println("onIncludeMethodC_5..."); return "hello world"; } /** * 替换该方法永远返回"hello world"字符串 */ @Discard(apply = ApplyConstants.Publish._TRUE, srcCode = "{return \"hello world injected!\";}") public String onIncludeMethodC_6() { System.out.println("onIncludeMethodC_6..."); return "hello world"; } } 1.3.3. build运行 通过以下命令进行构建: gradle clean assembleFullDebug -Ppublish=true -Pdisable=true 命令编译完成之后,该类的class文件将会根据配置的@Discard注解被自动修改成如下: build/intermediates/transforms/discardFile/.../IncludeClassC.class @Discard( apply = "publish==true" ) public class IncludeClassC { public IncludeClassC() { } public void onIncludeMethodC() { Object var10000 = null; } @Discard( apply = "publish==true", srcCode = "{System.out.println(\"onIncludeMethodC_2... injected!\");}" ) public void onIncludeMethodC_2() { System.out.println("onIncludeMethodC_2... injected!"); } @Discard( apply = "publish==true", srcCode = "{return true;}" ) public boolean onIncludeMethodC_3() { return true; } public int onIncludeMethodC_4() { return 0; } @Discard( apply = "publish==true", enable = false ) public String onIncludeMethodC_5() { System.out.println("onIncludeMethodC_5..."); return "hello world"; } @Discard( apply = "publish==true", srcCode = "{return \"hello world injected!\";}" ) public String onIncludeMethodC_6() { return "hello world injected!"; } }

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册