dagger2 让你欣赏:终结篇

正文作者: 伯乐在线 –
牛犇
。未经作者许可,禁止转载!
迎加入伯乐在线 专栏撰稿人。

前言

近年来MySQL版块被好像题材应运而生得比多。总结了一晃。

 

要是您对dagger2的定义,整个依赖注入框架还未晓得,可以优先了解下我的前2首文章:

由一些原因,有时候我们无按照范式的规划则而把部分性质放到跟一个字符串字段被。比如个人兴趣,有时候我们设计表为 create table members (uid int primary key,uname varchar(20),hobby varchar(100));

《dagger2让你嗜:基础依赖注入框架篇》
《dagger2让你喜欢:重点概念讲解、融合篇》

表明中内容如下

当时2首文章吧收到众多网友的好评和咨询,谢谢大家的支持。我大致总结了下提的题目:

mysql> select * from members; +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | |   4 | DDDD  | 台球,网络,看书,旅游             | |   5 | EEEE  | 音乐,发呆,下围棋,参禅           | +—–+——-+———————————+ 4 rows in set (0.00 sec)

  • dagger2到底会带动什么好处?
  • dagger2怎么使?

 

故我拿成这2点来进展本文的教学。并且会起切实的sample。

要是我们现纪念找一个同有用户X (阅读,交友,围棋,足球,滑雪)有着同样爱好的会员记录 如果来操作也?

dagger2到底出安好处?

俺们直奔主题:

充实开支效率、省去重复的大概体力劳动

第一new一个实例的历程是一个复的简单体力劳动,dagger2完全可以将new一个实例的做事召开了,因此我们管第一精力集中在事关重大业务及、同时也能够多开支效率上。

看去写单例的法子,并且也不需要担心好写的单例方法是否线程安全,自己写的单例是懒汉模式还是饿汉模式。因为dagger2都可拿这些干活儿举行了。

再好之管理类实例

每个app中之ApplicationComponent管理全app的全局类实例,所有的大局类实例都统一交由ApplicationComponent管理,并且其的生命周期与app的生命周期一样。

每个页面对应自己的Component,页面Component管理在自己页面所据的所有类实例。

盖Component,Module,整个app的切近实例结构变的坏清晰。

解耦

倘不用dagger2的说话,一个类似的new代码是蛮可能充斥在app的差不多只类似中之,假如该类的构造函数发生变化,那这些关乎到之近乎都得进行改动。设计模式中提倡将善变化之片段包装起来

俺们用了dagger2后。

倘若是通过用Inject注解标注的构造函数创建类实例,则就构造函数变的悠扬,我们基本上都未待改外代码。

假使是由此工厂模式Module创建类实例,Module其实就是拿new类实例的代码封装起来,这样尽管类的构造函数发生变化,只待改Module即可。

产生个网友发问了一个如此的问题,Module的构造函数也会发生变化,发生变化后,相应的new
Module的类为发生变化,这便从不直达解耦的法力。首先解耦不是说让类之间还是模块之间确实一点提到都无了,解耦达到的目的是深受一个近似或一个模块对和和谐出关联的类或模块的熏陶下挫到最低,不是说这种影响就是了没了,这是无可能的。

解耦还出个便宜,就是便于测试,若用替换为网络测试类,只待改相应的Module即可。

当外数据库被,我们能够仅仅经过序来还是存储过程来说明这个 “阅读,交友,围棋,足球,滑雪” 字符串为单独的喜爱项目,然后一个一个开展 like ‘%xxxx%’ 来询问。 但在MySQL中我们好直接下是regexp标准表达式 来组织SQL语句来实现。

花色遭到应用dagger2注意点

切实的代码就未摆了,dagger2
sample地址,大家自行下载。这里关键说下dagger2对目标类进行依赖注入的经过,现在如果要初始化目标类吃的内一个依赖类的实例,那具体步骤就当脚:

手续1:查找Module中是否有创建该类的法。
步骤2:若有创建类措施,查看该方式是否留存参数
步骤2.1:若在参数,则仍自**步骤1**开班挨家挨户初始化每个参数
步骤2.2:若未设有参数,则直接初始化该类实例,一赖因注入到此结束
步骤3:若无有创建类措施,则寻Inject注解的构造函数,
看构造函数是否是参数
步骤3.1:若在参数,则从**步骤1**开逐一初始化每个参数
步骤3.2:若无有参数,则一直初始化该类实例,一蹩脚因注入到此结束

1
2
3
4
5
6
7
8
步骤1:查找Module中是否存在创建该类的方法。
步骤2:若存在创建类方法,查看该方法是否存在参数
    步骤2.1:若存在参数,则按从**步骤1**开始依次初始化每个参数
    步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
步骤3:若不存在创建类方法,则查找Inject注解的构造函数,
           看构造函数是否存在参数
    步骤3.1:若存在参数,则从**步骤1**开始依次初始化每个参数
    步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束

如上是dagger2进行的均等不成因注入的步骤,其实这个手续是一个递归的历程,并且于查找类的实例的长河遭到Module的级别要大于Inject,这概念在上一篇讲过。

下面在游说下注意的几点

  • 一个app必须要起一个Component(名字可以是ApplicationComponent)用来管理app的布满全局类实例
  • 多只页面可以共享一个Component
  • 切莫是说Component就必定要是相应一个或者多只Module,Component也足以免含Module
  • 打定义Scope注解最好以上,虽然非采取啊是可为种周转起来的,但是加上好处多。

 

总结

好了关于dagger2的具备的概念知识点到之终于结束了,希望会辅助大家,与大家共勉,有题目可以随时和本人联系。

dagger2 sample地址

打赏支持自勾勒来更多好文章,谢谢!

打赏作者

率先我们将 ‘阅读,交友,围棋,足球,滑雪’ 转换成正则式 为 ‘阅读|交友|围棋|足球|滑雪’ ,  | 在正则表达式中吗 ‘‘ 的意思

打赏支持自己形容有重新多好文章,谢谢!

任选一栽出办法

图片 1
图片 2

2 赞 4 收藏 2
评论

mysql> select replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’); +———————————————+ | replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’) | +———————————————+ | 阅读|交友|围棋|足球|滑雪                    | +———————————————+ 1 row in set (0.00 sec)

关于作者:牛犇

图片 3

自身于毕业到本直从事android开发工作,现就职于滴滴出行。本人喜爱编程,兴趣爱好打台球,游泳。联系方式:微信/qq:
704451290本身之微信公众账号:Android-IOS-devper
个人主页 ·
我的文章 ·
13 ·
     

 

然咱们得据此SQL语句如下。 mysql> select * from members where hobby regexp replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’); +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | |   5 | EEEE  | 音乐,发呆,下围棋,参禅           | +—–+——-+———————————+ 3 rows in set (0.00 sec)

苟达到告诉句我们可以通过一样句子SQL得到所有hobby包含 ‘阅读,交友,围棋,足球,滑雪’ 任一宗之笔录。

可是上述的言辞中还有少数稍微之老毛病,那就是是拿 ‘下围棋’ 这同一长条为挑了出来,如果纯粹匹配的语句马上漫长记下不应该受选中。为了避免这种景象,我们针对SQL语句做如下改进。

管正则式改吧 ‘,(阅读|交友|围棋|足球|滑雪),’  也就是是求配合配项前后要来一个范围符”,

 

mysql> select concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’); +—————————————————————+ | concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’) | +—————————————————————+ | ,(阅读|交友|围棋|足球|滑雪),                                  | +—————————————————————+ 1 row in set (0.00 sec) mysql> select * from members     -> where concat(‘,’,hobby,’,’) regexp     ->   concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’); +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | +—–+——-+———————————+ 3 rows in set (0.00 sec)

然避免了第5长记下为选中。

 

理所当然也得使这种正则式 ‘,阅读,|,交友,|,围棋,|,足球,|,滑雪,’, 但效率斐然不如 ‘,(阅读|交友|围棋|足球|滑雪),’ 这种了。

 

参考文档:

 

MySQL 5.1参考手册 – 12.3.1. 字符串比较函数 – REGEXP (RLIKE)

http://dev.mysql.com/doc/refman/5.1/zh/functions.html#string-comparison-functions

 

MySQL 5.1参考手册 – 附录G:MySQL正则表达式

http://dev.mysql.com/doc/refman/5.1/zh/regexp.html