delegate

【Spring源码】Spring IOC 容器源码分析(一)

為{幸葍}努か 提交于 2020-12-16 20:12:25
本文较长,由于微信文章文字限制,IOC源码分析分为3个文章展示出来~ Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。 本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文所说的所有的内容都是基于 xml 的配置的方式,实际使用已经很少人这么做了,至少不是纯 xml 配置,不过从理解源码的角度来看用这种方式来说无疑是最合适的。 阅读建议:读者至少需要知道怎么配置 Spring,了解 Spring 中的各种概念,少部分内容我还假设读者使用过 SpringMVC。本文要说的 IOC 总体来说有两处地方最重要,一个是创建 Bean 容器,一个是初始化 Bean,如果读者觉得一次性看完本文压力有点大,那么可以按这个思路分两次消化。读者不一定对 Spring 容器的源码感兴趣,也许附录部分介绍的知识对读者有些许作用。 希望通过本文可以让读者不惧怕阅读 Spring 源码,也希望大家能反馈表述错误或不合理的地方。 目录 引言 先看下最基本的启动

C#知识结构

淺唱寂寞╮ 提交于 2020-12-16 03:31:06
对于一个工作多年的程序员而言,接口、反射、索引器、事件、委托这些耳熟能详的词汇,提起来别说多简单了,但是让老司机坐在那一个人拿起一支笔,把脑海中对C#知识结构进行梳理一下,大抵是写不了多内容的,原因是什么呢,是遗忘?当然不是,每天面对代码的老司机当然不会遗忘。 根本的原因是知识没有网格化。 知识结构网格化,对于现在频繁变化的技术格局来说,是势在必行且可以安身立命的根本 这个方法不仅使用编程菜鸟,同样使用编程老司机。 接下来我们进入正题,先来看一副图 原图,可通过本人的Github下载,连接如下 https://github.com/yuyue5945/Blog 在导图上列出如下几个基础的问题,这几个基础问题,会一直伴随着我们的编程生涯 什么是类? 什么是对象? 关于类与对象的关系 类和接口之间的关系 什么是封装,继承,多态 接下来,我们就走进C#基础结构的世界,从新梳理一下我们的知识结构吧 C#知识结构 基础概念 类-继承、封装、多态 封装 继承 类定义关键字 类调用关键字 动态 接口(Interface) 定义接口: MyInterface.cs 接下来我们来实现以上接口:InterfaceImplementer.cs 命名空间(Namespace) 定义命名空间 using 关键字 高级应用 特性(Attribute) 规定特性(Attribute) 预定义特性

如何使用 C# 中的 Action, Func,Predicate

£可爱£侵袭症+ 提交于 2020-12-04 13:42:34
译文链接:https://www.infoworld.com/article/3057152/how-to-work-with-action-func-and-predicate-delegates-in-csharp.html?nsdr=true 委托是一个类型安全的函数指针,它可以引用与委托具有相同签名的方法。委托常用于实现回调方法或者事件机制,在C#中一般用 "delegate" 关键字声明。你可以声明一个和类平级的委托,也可以嵌套在类中。 Func 和 Action 是什么,如何使用? 两者最基本的区别是,前者适合那些需要带返回值的委托,后者适合那些不带返回值的委托。 Func 所引用的方法接收一个或者多个入参并带有一个返回值,Action所引用的方法接收一个或者多个参数并且没有返回值,换句话说,你的委托所引用的方法没有返回值,这时候适合用 Action。 Predicate所引用的方法接收一个或者多个泛型参数并且返回一个 bool 值,你可以假定它等价于 Func<T,bool> ,Predicate 常用于对 collection 进行一组条件检索。 C# 中使用 Action 你可以使用 委托 去实现事件和回调方法,C#委托非常类似于C++中的函数指针,但是 C# 中的 委托 是类型安全的,你可以将方法作为参数传递给委托从而让委托指向该方法。 下面的代码片段展示了

C#细说多线程(上)

痴心易碎 提交于 2020-12-04 01:55:46
本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。 其中委托的BeginInvoke方法以及回调函数最为常用。 而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作。特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel。其实合理使用I/O线程在通讯项目或文件下载时,能尽可能地减少IIS的压力。 并行编程是Framework4.0中极力推广的异步操作方式,更值得更深入地学习。 希望本篇文章能对各位的学习研究有所帮助,当中有所错漏的地方敬请点评。 目录 一、线程的定义 二、线程的基础知识 三、以ThreadStart方式实现多线程 四、CLR线程池的工作者线程 五、CLR线程池的I/O线程 六、异步 SqlCommand 七、并行编程与PLINQ 八、计时器与锁 一、线程的定义 1. 1 进程、应用程序域与线程的关系 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。

.Net 反序列化原理学习

一个人想着一个人 提交于 2020-12-01 10:23:28
作者:HuanGMz@知道创宇404实验室 时间:2020年11月30日 一.TypeConfuseDelegate工具链 TypeConfuseDelegate 工具链 利用了SortedSet类在反序列化时调用比较器进行排序,以及多播委托可以修改委托实例的特点实现在反序列化时执行代码 0x10 基础知识 0x11 SortedSet<T> SortedSet<T> 从其名字就可以看出其用处,可排序的set,表示按排序顺序维护的对象的集合。<T> 为泛型用法,T表示集合中元素的类型。 既然是可排序的,那么集合中的元素要依据什么进行排序呢?我们看一个SortedSet 的例子就知道了: // Defines a comparer to create a sorted set // that is sorted by the file extensions. public class ByFileExtension : IComparer<string> { string xExt, yExt; CaseInsensitiveComparer caseiComp = new CaseInsensitiveComparer(); public int Compare(string x, string y) { // Parse the extension from the file

C#的委托案例

时光怂恿深爱的人放手 提交于 2020-11-24 04:38:26
C#实现(Delegate)的委托就不多说了,直接上代码,看代码中的注释: namespace Delegate { delegate void DGSayiHi( string name); // 声明委托 delegate void DGDo( string name); class Program { static void Main( string [] args) { DGSayiHi sayhi = new DGSayiHi(SayChineseHi); DGSayiHi sayhi2 = new DGSayiHi(SayEnglishHi); sayhi += sayhi2; // 实际上+=相当于Delegate.Combine, -=相当于Delegate.Remove sayhi( " 春晓 " ); Console.ReadLine(); } static void SayChineseHi( string name) { Console.WriteLine( " 你好: " + name); } static void SayEnglishHi( string name) { Console.WriteLine( " Hello: " + name); } } } 来源: oschina 链接: https://my.oschina.net/u

C#的委托案例

心已入冬 提交于 2020-11-24 03:54:28
C#实现(Delegate)的委托就不多说了,直接上代码,看代码中的注释: namespace Delegate { delegate void DGSayiHi( string name); // 声明委托 delegate void DGDo( string name); class Program { static void Main( string [] args) { DGSayiHi sayhi = new DGSayiHi(SayChineseHi); DGSayiHi sayhi2 = new DGSayiHi(SayEnglishHi); sayhi += sayhi2; // 实际上+=相当于Delegate.Combine, -=相当于Delegate.Remove sayhi( " 春晓 " ); Console.ReadLine(); } static void SayChineseHi( string name) { Console.WriteLine( " 你好: " + name); } static void SayEnglishHi( string name) { Console.WriteLine( " Hello: " + name); } } } 来源: oschina 链接: https://my.oschina.net/u

dubbo系列之xml解析原理NamespaceHandler(二)

为君一笑 提交于 2020-11-23 16:33:56
欢迎关注公众号【sharedCode】致力于主流中间件的源码分析, 可以直接与我联系 前言 上一节中我们基于springboot搭建了dubbo的基本用例,能够使用dubbo的基本功能,在dubbo重新开源之前,大部分人都是通过spring的xml文件进行配置的,基于这个背景,有必要讲一下dubbo是怎么解析xml文件,生成代理对象的。 版本说明 springboot starter : 0.1.1 dubbo版本: 2.6.2 DubboNamespaceHandler 这个是dubbo基于spring的扩展点用来解析xml文件的类 public class DubboNamespaceHandler extends NamespaceHandlerSupport { static { Version.checkDuplicate(DubboNamespaceHandler.class); } @Override public void init() { // 解析<dubbo:application/>标签 全局配置,用于配置当前应用信息,不管该应用是提供者还是消费者 registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));

iOS:手势与矩形、点运算相关(18-01-24更)

别说谁变了你拦得住时间么 提交于 2020-11-23 06:34:46
1、矩形、点运算   1、获取当前的View在Window的frame   2、包含判断   3、获取点击在响应者 touchesBegan 的位置   4、UIScrollView、UITableView 实时 位置 相关 2、手势   1、点击(UITapGestureRecognizer)   2、拖移(UIPanGestureRecognizer)、轻扫(UISwipeGestureRecognizer)   3、长按(UILongPressGestureRecognizer)   4、旋转(UIRotationGestureRecognizer)   5、捏合(UIPinchGestureRecognizer) 3、触摸    0、写在前面   可通过 NSStringFromCGPoint 等方法,用"%@"调试输出,不用再 point.x、point.y 列出来。rect 方法同。 1、矩形、点运算   1、获取当前的View在Window的frame UIWindow * window=[[[UIApplication sharedApplication] delegate] window]; CGRect rect=[_myButton convertRect:_myButton.bounds toView:window];   后续补充:     toView

unity3d俄罗斯方块源码教程+源码和程序下载

眉间皱痕 提交于 2020-11-22 16:02:33
小时候,大家都应玩过或听说过《俄罗斯方块》,它是红白机,掌机等一些电子设备中最常见的一款游戏。而随着时代的发展,信息的进步,游戏画面从简单的黑白方块到彩色方块,游戏的玩法机制从最简单的消方块到现在的多人pk等,无一不是在体现它的火爆。在这里,通过这篇文章向大家分享一下自己在制作俄罗斯方块的经验和心得,以及文章最后的源码和pc程序。 首先,看标题都知道这篇文章中所用到的游戏引擎是:unity3d,版本不限,但最好是5.4.3以上的,原因是因为作者自己没有用过5.4.3以下的版本。 准备工具都有:unity3d + Visual Studio 2015 素材准备有(密码:m6gz): 字体方正粗圆_GBK,以及一些图集 项目分析: 当一切准备就绪后,就可以开始创建我们的俄罗斯方块工程(2d)的。 一、游戏框架的搭建和方块预设物的制作 1.双击unity快捷方式,打开unity界面点击New新建工程,Template类型选择2d,工程名 Tetris,点击创建后稍等片刻进入编辑器界面 ​ 2.在Assets文件夹下创建几个常用文件夹用来归类: 创建文件夹方式,在Project面板下右键 ​ Scenes(场景文件夹),Resources(资源文件夹),Script(脚本文件夹),Texture(图集文件夹),Prefabs(预设物文件夹) ​