delegate

Expression<Func<TObject, bool>>与Func<TObject, bool>的区别

六月ゝ 毕业季﹏ 提交于 2020-08-17 20:09:28
Func<TObject, bool>是委托(delegate) Expression<Func<TObject, bool>>是表达式比如: Expression编译后就会变成delegate,才能运行。 Expression<Func<int, bool>> ex = x=>x < 100; Func<int, bool> func = ex.Compile(); 然后你就可以调用func: func(5) //-返回 true func(200) //- 返回 false 而表达式是不能直接调用的。 1 2 3 4 5 6 7 8 9 10 11 12 案例:不正确的查询代码造成的数据库全表查询。 //错误的代码 Func<QuestionFeed, bool > predicate = null ; if (type == 1) { predicate = f => f.FeedID == id && f.IsActive == true ; } else { predicate = f => f.FeedID == id; } //_questionFeedRepository.Entities的类型为IQueryable<QuestionFeed> _questionFeedRepository.Entities.Where(predicate);

IOC容器的初始化

試著忘記壹切 提交于 2020-08-17 16:59:28
1、BeanFactory   Spring Bean 的创建是典型的工厂模式,这一系列的Bean 工厂,也即IOC 容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在Spring 中有许多的IOC 容器的实现供用户选择和使用,其相互关系如下:   其中BeanFactory 作为最顶层的一个接口类,它定义了IOC 容器的基本功能规范,BeanFactory 有三个重要的子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是从类图中我们可以发现最终的默认实现类是DefaultListableBeanFactory,它实现了所有的接口。那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有它使用的场合,它主要是为了区分在Spring 内部在操作过程中对象的传递和转化过程时,对对象的数据访问所做的限制。例如ListableBeanFactory 接口表示这些Bean 是可列表化的,而HierarchicalBeanFactory 表示的是这些Bean 是有继承关系的,也就是每个Bean 有可能有父Bean。AutowireCapableBeanFactory 接口定义Bean 的自动装配规则。这三个接口共同定义了Bean 的集合、Bean 之间的关系

C#中的委托和事件(续)

不羁岁月 提交于 2020-08-17 15:23:52
引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点, 事件应该由事件发布者触发,而不应该由客户端(客户程序)来触发。 这句话是什么意思呢?请看下面的范例: NOTE: 注意这里术语的变化,当我们单独谈论事件,我们说发布者(publisher)、订阅者(subscriber)、客户端(client)。当我们讨论Observer模式,我们说主题(subject)和观察者(observer)。客户端通常是包含Main()方法的Program类。 class Program { static void Main(string[] args) { Publishser pub = new Publishser(); Subscriber sub = new Subscriber(); pub.NumberChanged += new NumberChangedEventHandler

Spring 源码解读第七弹!bean 标签的解析

可紊 提交于 2020-08-17 08:31:04
1.前文回顾 不知道小伙伴们是否还记得,在前面我们讲 Spring 文档加载的时候,涉及到如下一段源码: protected int doLoadBeanDefinitions ( InputSource inputSource , Resource resource ) throws BeanDefinitionStoreException { try { Document doc = doLoadDocument ( inputSource , resource ) ; int count = registerBeanDefinitions ( doc , resource ) ; if ( logger . isDebugEnabled ( ) ) { logger . debug ( "Loaded " + count + " bean definitions from " + resource ) ; } return count ; } catch ( BeanDefinitionStoreException ex ) { throw ex ; } catch ( SAXParseException ex ) { throw new XmlBeanDefinitionStoreException ( resource . getDescription ( ) ,

C# 中的委托和事件

六眼飞鱼酱① 提交于 2020-08-16 12:09:48
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。 将方法作为方法的参数 我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语: public void GreetPeople( string name) { // 做某些额外的事情,比如初始化之类,此处略 EnglishGreeting(name); } public void EnglishGreeting( string name) { Console .WriteLine( "Morning, " + name); } 暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好,当我们传递代表某人姓名的name参数,比如说“Jimmy”,进去的时候,在这个方法中,将调用EnglishGreeting方法,再次传递name参数

Android端埋点自动采集技术原理剖析

梦想的初衷 提交于 2020-08-16 06:00:50
前言: -更多关于数智化转型、数据中台内容请加入 阿里云数据中台交流群—数智俱乐部 (文末扫描二维码或 点此加入 ) -阿里云数据中台官网 https://dp.alibaba.com/index (作者:qingliang_hu) 定义 APP埋点自动采集是指用户在APP内的操作行为自动采集并上报日志,其表现在APP上的元素(按钮、图片等)的行为主要分为点击和曝光行为 。 其中曝光意为该元素在可视区域停留时长达到一定阈值,即标记为一次曝光行为。 本文主要定位为对Andorid端内部自动采集技术的原理剖析。 核心原理 主流的Android端的事件监听机制主要有 Listener代理,Hook,AccessibilityDelegate,dispatchTouchEvent 四种监听方式,下面将简要总结四种方式的具体实现。 (此处不介绍采用AspectJ框架编译期注入代码方式实现监听,主要原因在于此方式相对而言太暴力,业务侵入性太强,很难在业务方APP上进行推广和实现,感兴趣的可自行Google/Baidu。) Listener代理 在Android中,对于事件的监听及逻辑处理主要通过对View.onClickListener中的onClick方法进行覆写,如 View saveView = findViewById(R.id.btnSave); saveView

《CLR via C#》笔记——异常和状态管理

这一生的挚爱 提交于 2020-08-15 07:59:05
目录 一 ,定义异常 二,异常处理机制 2.1 try块 2.2 catch块 2.3 finally块 2.4 CLS和非CLR异常 三,System.Exception类 四,抛出异常 五,自定义异常类 六,用可靠性换取开发效率 七,指导原则和最佳实践 7.1 善用finally块 7.2 不要什么都捕捉 7.3 得体的从异常中恢复 7.4 从不可恢复的异常中回滚——维持状态 7.5 隐藏实现细节来维持契约 八,未处理异常 九,约束执行区(CER) 十,代码契约 一,定义异常 什么时候应该抛异常?当一个类型的成员(如方法,属性)不能完成任务时,就应抛出异常。面向对象的编程大大提高了开发人员的效率,因为我们可以这样写代码: public bool TestFunc( string input) { return input.Substring( 1 , 1 ).ToUpper().EndsWith( " E " ); } 我们没有做任何的参数检查,而直接调用了一长串的方法。当input参数为null或空时,上面的代码就会抛出异常。即使方法为没有返回值的void型也应该报告错误,.Net Framework提供的这种机制就叫做 异常处理( excepton handling ) 。 二,异常处理机制 .Net Framework异常处理机制是用Windows提供的结构化异常处理

myBatis源码解析-缓存篇(2)

浪尽此生 提交于 2020-08-15 04:02:37
上一章分析了mybatis的源码的日志模块,像我们经常说的mybatis一级缓存,二级缓存,缓存究竟在底层是怎样实现的。此次开始分析缓存模块 1. 源码位置,mybatis源码包位于org.apache.ibatis.cache下,如图 2. 先从org.apache.ibatis.cache下的cache接口开始 // 缓存接口 public interface Cache { // 获取缓存ID String getId(); // 放入缓存 void putObject(Object key, Object value); // 获取缓存 Object getObject(Object key); // 移除某一缓存 Object removeObject(Object key); // 清除缓存 void clear(); // 获取缓存大小 int getSize(); // 获取锁 ReadWriteLock getReadWriteLock(); } mybatis提供了自定义的缓存接口,功能通俗易懂,没什么好解释的。有接口,必然有实现,看一下缓存接口的基本实现类PerpetualCache,所在路径为org.apache.ibatis.cache.impl下。 public class PerpetualCache implements Cache { //

工作十余年,还是一直被问 委托和事件 有什么区别? 真是够了

喜欢而已 提交于 2020-08-15 02:54:07
一:背景 1. 讲故事 前几天公司一个妹子问我,事件和委托有什么区别? 先由衷感叹一下,编码十余年,年轻的时候常被面试官问起,现在年长了,却被后辈们时常问候,看样子逃离编码生涯之前是跑不掉了,不过奇怪的是,这个问题被问起的时候,我发现有很多人用: 事件是一种特殊的委托 来进行总结,是不是挺有意思,我想这句话可能来自于网络上的面试题答案吧,这篇我就试着彻底总结一下。 二:事件真的是特殊的委托吗? 1. 猫和老鼠 经典案例 要想知道两者到底什么关系? 先得有一些基础代码,这里就用大家初学事件时用到的 猫和老鼠 经典案例,代码简化如下: class Program { static void Main(string[] args) { Cat cat = new Cat("汤姆"); Mouse mouse1 = new Mouse("杰瑞", cat); Mouse mouse2 = new Mouse("杰克", cat); cat.CatComing(); Console.ReadKey(); } } class Cat { public event Action CatCome; //声明一个事件 private string name; public Cat(string name) { this.name = name; } public void CatComing() {

怎样从外网访问内网服务器

醉酒当歌 提交于 2020-08-14 15:26:22
已移动至: http://www.zhihu.com/question/21961711/answer/34891413 ★★★★ ★ FBI WARNING ★ ★★★★ 以下操作相当于给内网的防火墙上开了个洞,会给整个内网带来极其严重的安全隐患! 为避免产生法律问题,请在操作前务必向网络管理员咨询您的操作权限! ★ ★★★★ ★ ★★★★ ★ ★★★★ ★ ★★★ 《基于VPS服务器的内网代理转发方案》 前言 假设我们在内网有一个自己的电脑A(运行Win7),希望在外网家中用另一台电脑B(运行Win7)访问内网资源,或伪装为内网电脑访问外网资源。 由于内网电脑没有公网IP,所以外网电脑无法直接向内网电脑发起连接。为实现我们的目标,需要从内网电脑主动向一个公网服务器发起一个连接,外网电脑通过这个服务器使用这一连接,再通过内网电脑进行访问。 现在已有许多商业内网代理服务器可以实现此功能,比如花生壳、步轻云、TeamView、GoToMyCloud等等。但天下没有免费的午餐, 要使用第三方的公网服务器就必须为第三方付费 ,并且这些服务器都有各种各样的限制。此外,由于数据包会流经第三方,因此对 数据安全也是一大隐患 。 随着个人VPS服务器的普及,越来越多的朋友想用自己的VPS服务器作为内网代理,这样既安全又免费。本套方案实现了这一目标,并具有以下无可替代的优势: