详解spring的IOC控制反转和DI依赖注入_spring控制反转和依赖注入-程序员宅基地

技术标签: spring  --spring--  

转载

详解spring的IOC控制反转和DI依赖注入

         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
            <div class="htmledit_views" id="content_views">
                                        <p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;"> 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。</p><h2 style="margin-top:10px;margin-bottom:10px;font-size:21px;line-height:1.5;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t0"></a>一、分享Iteye的开涛对Ioc的精彩讲解</h2><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;">  首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846</p><h3 style="font-size:16px;line-height:1.5;margin-top:10px;margin-bottom:10px;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t1"></a>1.1、IoC是什么</h3><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  <span style="line-height:21px;color:rgb(255,0,0);"><strong>Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。</strong><span style="line-height:21px;color:rgb(0,0,0);">在Java开发中,<span style="line-height:21px;color:rgb(255,0,0);"><strong>Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。</strong></span></span></span>如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  ●<span style="line-height:1.5em;padding:0px;margin:0px;"><span style="line-height:21px;color:rgb(255,0,0);">谁控制谁,控制什么</span>:</span>传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而<span style="line-height:21px;">IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;<strong><span style="line-height:21px;color:rgb(255,0,0);">谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)</span>。</strong></span></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  ●<span style="line-height:1.5em;padding:0px;margin:0px;"><span style="line-height:21px;color:rgb(255,0,0);">为何是反转,哪些方面反转了</span>:</span>有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?<span style="line-height:21px;color:rgb(255,0,0);"><strong>因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。</strong></span></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  用图例说明一下,传统程序设计如图2-1,都是主动去创建相关对象然后再组合起来:</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;text-align:center;"><img src="https://images0.cnblogs.com/blog/289233/201501/261421378318292.jpg" alt="" style="border:1px solid #000000;max-width:900px;"></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;text-align:center;">图1-1 传统应用程序示意图</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;text-align:left;">  当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图2-2所示:</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;text-align:center;"></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;text-align:center;">图1-2有IoC/DI容器后程序结构示意图</p><h3 style="font-size:16px;line-height:1.5;margin-top:10px;margin-bottom:10px;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t2"></a>1.2、IoC能做什么</h3><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  其实<span style="line-height:21px;color:rgb(255,0,0);"><strong>IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。</strong></span></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  <span style="line-height:21px;color:rgb(255,0,0);"><strong>IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。</strong></span></p><h3 style="font-size:16px;line-height:1.5;margin-top:10px;margin-bottom:10px;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t3"></a>1.3、IoC和DI</h3><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  <span style="line-height:21px;color:rgb(255,0,0);"><strong>DI—Dependency Injection,即“依赖注入”</strong></span>:<span style="line-height:21px;color:rgb(255,0,0);"><strong>组件之间依赖关系</strong></span>由容器在运行期决定,形象的说,即<span style="line-height:21px;color:rgb(255,0,0);"><strong>由容器动态的将某个依赖关系注入到组件之中</strong></span>。<span style="line-height:21px;color:rgb(255,0,0);"><strong>依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。</strong></span>通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  ●<span style="line-height:1.5em;padding:0px;margin:0px;">谁依赖于谁:</span>当然是<span style="line-height:21px;color:rgb(255,0,0);"><strong>应用程序依赖于IoC容器</strong></span>;</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  ●<span style="line-height:1.5em;padding:0px;margin:0px;">为什么需要依赖:</span><span style="line-height:21px;color:rgb(255,0,0);"><strong>应用程序需要IoC容器来提供对象需要的外部资源</strong></span>;</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  ●<span style="line-height:1.5em;padding:0px;margin:0px;">谁注入谁:</span>很明显是<span style="line-height:21px;color:rgb(255,0,0);"><strong>IoC容器注入应用程序某个对象,应用程序依赖的对象</strong></span>;</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;"><span style="line-height:1.5em;padding:0px;margin:0px;">  ●注入了什么:</span>就是<span style="line-height:21px;color:rgb(255,0,0);"><strong>注入某个对象所需要的外部资源(包括对象、资源、常量数据)</strong></span>。</p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  <span style="line-height:21px;color:rgb(255,0,0);"><strong>IoC和DI</strong></span>由什么<span style="line-height:21px;color:rgb(255,0,0);"><strong>关系</strong></span>呢?其实它们<span style="line-height:21px;color:rgb(255,0,0);"><strong>是同一个概念的不同角度描述</strong></span>,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,<span style="line-height:21px;color:rgb(255,0,0);"><span style="line-height:1.5em;padding:0px;margin:0px;">“依赖注入”明确描述了“被注入对象依赖IoC</span></span><span style="line-height:1.5em;padding:0px;margin:0px;"><span style="line-height:21px;color:rgb(255,0,0);">容器配置依赖对象”</span>。</span></p><p style="margin:10px auto;color:rgb(0,0,0);font-size:14px;font-family:verdana, arial, helvetica, sans-serif;line-height:1.5em;">  看过很多对Spring的Ioc理解的文章,好多人对Ioc和DI的解释都晦涩难懂,反正就是一种说不清,道不明的感觉,读完之后依然是一头雾水,感觉就是开涛这位技术牛人写得特别通俗易懂,他清楚地解释了IoC(控制反转) 和DI(依赖注入)中的每一个字,读完之后给人一种豁然开朗的感觉。我相信对于初学Spring框架的人对Ioc的理解应该是有很大帮助的。</p><h2 style="margin-top:10px;margin-bottom:10px;font-size:21px;line-height:1.5;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t4"></a>二、分享Bromon的blog上对IoC与DI浅显易懂的讲解</h2><h3 style="font-size:16px;line-height:1.5;margin-top:10px;margin-bottom:10px;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t5"></a>2.1、IoC(控制反转)</h3><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;">  首先想说说<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>IoC(Inversion of Control,控制反转)</strong></span>。这是<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>spring的核心</strong></span>,贯穿始终。<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。</strong></span>这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。</p><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;">  那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>Spring所倡导的开发方式</strong></span>就是如此,<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由&nbsp;spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。</strong></span></p><h3 style="font-size:16px;line-height:1.5;margin-top:10px;margin-bottom:10px;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t6"></a>2.2、DI(依赖注入)</h3><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;"><span style="line-height:normal;">  <span style="line-height:19.5px;color:rgb(255,0,0);"><strong>IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的</strong></span>。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了&nbsp;spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖&nbsp;Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?&nbsp;Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。</span></p><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;"><span style="line-height:normal;">  理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作只是在spring的框架中堆积木而已。</span></p><h2 style="margin-top:10px;margin-bottom:10px;font-size:21px;line-height:1.5;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t7"></a><span style="line-height:normal;">三、我对IoC<span style="line-height:31.5px;color:rgb(255,0,0);"><strong><span style="line-height:normal;"><span style="line-height:31.5px;">(控制反转)</span></span></strong></span>和DI<span style="line-height:31.5px;color:rgb(255,0,0);"><strong><span style="line-height:normal;"><span style="line-height:31.5px;">(依赖注入)</span></span></strong></span>的理解</span></h2><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;"><span style="line-height:normal;">  在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,<span style="line-height:normal;">就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。</span></span></p><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;"><span style="line-height:normal;">  所以<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前<span style="line-height:normal;"><span style="line-height:normal;">创建对象的主动权和创建时机是由自己把控的</span></span>,而现在这种权力转移到第三方</strong></span>,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。</span></p><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;">  这是我对Spring的IoC<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>(控制反转)</strong></span>的理解。DI<span style="line-height:19.5px;color:rgb(255,0,0);"><strong>(依赖注入)</strong></span>其实就是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:<span style="line-height:19.5px;color:rgb(255,0,0);"><strong><span style="line-height:normal;">控制的什么被反转了?就是:获得依赖对象的方式反转了。</span></strong></span></p><h2 style="margin-top:10px;margin-bottom:10px;font-size:21px;line-height:1.5;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"><a name="t8"></a>四、小结</h2><p style="margin:10px auto;color:rgb(0,0,0);font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;font-size:13px;">  对于Spring Ioc这个核心概念,我相信每一个学习Spring的人都会有自己的理解。这种概念上的理解没有绝对的标准答案,仁者见仁智者见智。如果有理解不到位或者理解错的地方,欢迎广大园友指正!</p>                                    </div>
                </div>
</article>
<div class="postTime"> 
    <div class="article-bar-bottom">
        <span class="time">
            文章最后发布于: 2018-06-05 15:45:34            </span>
    </div>
</div>
        <div class="hide-article-box hide-article-pos text-center">
        <a class="btn-readmore" data-report-view="{&quot;mod&quot;:&quot;popu_376&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;,&quot;strategy&quot;:&quot;readmore&quot;}" data-report-click="{&quot;mod&quot;:&quot;popu_376&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;,&quot;strategy&quot;:&quot;readmore&quot;}">
            展开阅读全文
            <svg class="icon chevrondown" aria-hidden="true">
                <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-chevrondown"></use>
            </svg>
        </a>
    </div>
            <!--打赏开始-->
                        <div class="reward-user-box">
                <span class="reward-word" style="color:#B4B4B4 !important">有 <span class="num">0</span> 个人打赏</span>
                                    <a target="_blank" href="https://im.csdn.net/im/main.html?userName=qq_38122518" data-report-click="{&quot;mod&quot;:&quot;popu_810&quot;,&quot;dest&quot;:&quot;私信&quot;}" data-report-view="{&quot;mod&quot;:&quot;popu_810&quot;,&quot;dest&quot;:&quot;私信&quot;}" id="profile-content-alink">
                     <div class="reward-fexd" id="">
                <!-- iconcsdnc-bookmark -->
                <svg class="reward-icon" aria-hidden="true">
				<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-envelope"></use>
			    </svg>
                <div>私信求帮助</div>
                </div>
                </a>
               
            </div>
                    <!--打赏结束-->
        <div class="recommend-box"><div class="recommend-item-box type_blog clearfix" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_35504206/article/details/80935821&quot;,&quot;strategy&quot;:&quot;BlogCommendFromMachineLearnPai2&quot;,&quot;index&quot;:&quot;0&quot;}">
<div class="content" style="width: 712px;">
	<a href="https://blog.csdn.net/qq_35504206/article/details/80935821" target="_blank" rel="noopener" title="Spring IOC(控制反转)的三种依赖注入方式">
	<h4 class="text-truncate oneline" style="width: 552px;">
			<em>Spring</em> <em>IOC</em>(<em>控制</em><em>反转</em>)的三种<em>依赖</em><em>注入</em>方式		</h4>
	<div class="info-box d-flex align-content-center">
		<p class="date-and-readNum oneline">
			<span class="date hover-show">07-06</span>
			<span class="read-num hover-hide">
				阅读数 
				1267</span>
			</p>
		</div>
	</a>
	<p class="content" style="width: 712px;">
		<a href="https://blog.csdn.net/qq_35504206/article/details/80935821" target="_blank" rel="noopener" title="Spring IOC(控制反转)的三种依赖注入方式">
			<span class="desc oneline">1)、什么是依赖注入(DI)和控制反转(IOC)依赖注入和控制反转是对同一件事情的不同描述,从某个方面来讲,就是他们描述的角度不同。依赖注入是从应用程序的角度在描述,应用程序依赖容器创建并注入它所需要...</span>
		</a>
		<span class="blog_title_box oneline ">
								<span class="type-show type-show-blog type-show-after">博文</span>
										<a target="_blank" rel="noopener" href="https://blog.csdn.net/qq_35504206">来自:	<span class="blog_title"> qq_35504206的博客</span></a>
											</span>
	</p>
</div>
</div>
还能输入1000个字符
<div class="comment-list-container">
	<a id="comments"></a>
	<div class="comment-list-box" style="max-height: none;"><ul class="comment-list"><li class="comment-line-box d-flex" data-commentid="9859143" data-replyname="Bayern233">      <a target="_blank" href="https://me.csdn.net/Bayern233"><img src="https://profile.csdnimg.cn/1/B/D/3_bayern233" username="Bayern233" alt="Bayern233" class="avatar"></a>        <div class="right-box ">          <div class="new-info-box clearfix">            <a target="_blank" href="https://me.csdn.net/Bayern233"><span class="name ">Java不学好不改名</span></a><span class="date" title="2019-05-26 21:03:12">5个月前</span><span class="floor-num">#1楼</span><span class="new-comment">点赞</span><span class="new-opt-box"><a class="btn btn-link-blue btn-report" data-type="report">举报</a><a class="btn btn-link-blue btn-reply" data-type="reply">回复</a></span></div><div class="comment-like " data-commentid="9859143"><svg t="1569296798904" class="icon " viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5522" width="200" height="200"><path d="M726.016 906.666667h-348.586667a118.016 118.016 0 0 1-116.992-107.904l-29.013333-362.666667A117.589333 117.589333 0 0 1 348.458667 309.333333H384c126.549333 0 160-104.661333 160-160 0-51.413333 39.296-88.704 93.397333-88.704 36.906667 0 71.68 18.389333 92.928 49.194667 26.88 39.04 43.178667 111.658667 12.714667 199.509333h95.530667a117.418667 117.418667 0 0 1 115.797333 136.106667l-49.28 308.522667a180.608 180.608 0 0 1-179.072 152.704zM348.458667 373.333333l-4.48 0.170667a53.461333 53.461333 0 0 0-48.768 57.472l29.013333 362.666667c2.218667 27.52 25.6 49.024 53.205333 49.024h348.544a116.949333 116.949333 0 0 0 115.925334-98.816l49.322666-308.736a53.418667 53.418667 0 0 0-52.650666-61.781334h-144.085334a32 32 0 0 1-28.458666-46.634666c45.909333-89.130667 28.885333-155.434667 11.562666-180.522667a48.981333 48.981333 0 0 0-40.192-21.504c-6.912 0-29.397333 1.792-29.397333 24.704 0 111.317333-76.928 224-224 224h-35.541333zM170.624 906.666667a32.042667 32.042667 0 0 1-31.872-29.44l-42.666667-533.333334a32.042667 32.042667 0 0 1 29.354667-34.474666c17.066667-1.408 33.024 11.733333 34.432 29.354666l42.666667 533.333334a32.042667 32.042667 0 0 1-31.914667 34.56z" p-id="5523"></path></svg><span>1</span></div></div></li></ul></div>
	<div id="commentPage" class="pagination-box d-none" style="display: block;"><div id="Paging_04113456198953118" class="ui-paging-container"><ul><li class="js-page-first js-page-action ui-pager ui-pager-disabled"></li><li class="js-page-prev js-page-action ui-pager ui-pager-disabled">上一页</li><li data-page="1" class="ui-pager focus">1</li><li class="js-page-next js-page-action ui-pager ui-pager-disabled">下一页</li><li class="js-page-last js-page-action ui-pager ui-pager-disabled"></li></ul></div></div>
	
</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_59" data-pid="59"><script type="text/javascript">
(function() {
    var s = "_" + Math.random().toString(36).slice(2);
    document.write('<div style="" id="' + s + '"></div>');
    (window.slotbydup = window.slotbydup || []).push({
        id: "u3491668",
        container:  s
    });
})();

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_60" data-pid="60"><iframe src="https://adaccount.csdn.net/#/preview/260?m=ncQtAJiinbQppHiiJncJDynptHcQmEnLcSHSXAnASQHDXnQAAtppAHASStSQpnWUAJvnnJbXLSSoQbStSUSEtfXnpHDbQtJbJiSQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=ncQtAJiinbQppHiiJncJDynptHcQmEnLcSHSXAnASQHDXnQAAtppAHASStSQpnWUAJvnnJbXLSSoQbStSUSEtfXnpHDbQtJbJiSQ"></div></div>
		<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
		<div class="d-flex">
			<div class="blog-expert-recommend">
				<div class="blog-expert">
					<div class="blog-expert-flexbox" data-report-view="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/qq_35504206" target="_blank"><img src="https://profile.csdnimg.cn/D/F/1/3_qq_35504206" username="qq_35504206" alt="koga007" title="koga007"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="qq_35504206" data-nick="koga007">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/qq_35504206" target="_blank"><h5 class="oneline" title="koga007">koga007</h5></a></span>  <p></p><p class="article-num" title="53篇文章"> 53篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/weixin_33790053" target="_blank"><img src="https://profile.csdnimg.cn/A/9/F/3_weixin_33790053" username="weixin_33790053" alt="weixin_33790053" title="weixin_33790053"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="weixin_33790053" data-nick="weixin_33790053">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/weixin_33790053" target="_blank"><h5 class="oneline" title="weixin_33790053">weixin_33790053</h5></a></span>  <p></p><p class="article-num" title="4537篇文章"> 4537篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/Tee_ice" target="_blank"><img src="https://profile.csdnimg.cn/C/7/F/3_tee_ice" username="Tee_ice" alt="Tee_ice" title="Tee_ice"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="Tee_ice" data-nick="Tee_ice">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/Tee_ice" target="_blank"><h5 class="oneline" title="Tee_ice">Tee_ice</h5></a></span>  <p></p><p class="article-num" title="4篇文章"> 4篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/qq_35240673" target="_blank"><img src="https://profile.csdnimg.cn/7/6/0/3_qq_35240673" username="qq_35240673" alt="pm_WeiYu" title="pm_WeiYu"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="qq_35240673" data-nick="pm_WeiYu">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_38122518/article/details/80582392&quot;}"><a href="https://blog.csdn.net/qq_35240673" target="_blank"><h5 class="oneline" title="pm_WeiYu">pm_WeiYu</h5></a></span>  <p></p><p class="article-num" title="27篇文章"> 27篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div></div>
				</div>
			</div>
		</div>
	</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_61" data-pid="61"><iframe src="https://adaccount.csdn.net/#/preview/263?m=ntcpQQpEnHSSpcipiJJAEDALSbybHcLpAJpbtEtAAtbQmLAnvHJXiiEtpcHSEnDXptLtUAAEHiQWSLDJfbQUUStLpSEcUDHLDiQQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=ntcpQQpEnHSSpcipiJJAEDALSbybHcLpAJpbtEtAAtbQmLAnvHJXiiEtpcHSEnDXptLtUAAEHiQWSLDJfbQUUStLpSEcUDHLDiQQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_62" data-pid="62"><iframe src="https://adaccount.csdn.net/#/preview/787?m=JcJbpfvtiSiinHSniJDAbScnJtoHLcJASAAJUEbEAnXvAAbHSEbtXnSDHtyLmyASHpQbWicybpiLnEmAfJDUtnnJUXJbnHcnAJvQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=JcJbpfvtiSiinHSniJDAbScnJtoHLcJASAAJUEbEAnXvAAbHSEbtXnSDHtyLmyASHpQbWicybpiLnEmAfJDUtnnJUXJbnHcnAJvQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_63" data-pid="63"><iframe src="https://adaccount.csdn.net/#/preview/786?m=cttfEAiJvbbESHJLEEDELtncoAiHSSEiLbAAcAUSXUtEHXUnnibbJpSbHEEiptytimXHiAQWitSLcXyiUpUDQibDttEHEApcvJnQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=cttfEAiJvbbESHJLEEDELtncoAiHSSEiLbAAcAUSXUtEHXUnnibbJpSbHEEiptytimXHiAQWitSLcXyiUpUDQibDttEHEApcvJnQ"></div></div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_64" data-pid="64"><script type="text/javascript">
(function() {
    var s = "_" + Math.random().toString(36).slice(2);
    document.write('<div style="" id="' + s + '"></div>');
    (window.slotbydup = window.slotbydup || []).push({
        id: "u3600856",
        container:  s
    });
})();

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_65" data-pid="65"><script type="text/javascript">
    (function() {
        var s = "_" + Math.random().toString(36).slice(2);
        document.write('<div style="" id="' + s + '"></div>');
        (window.slotbydup = window.slotbydup || []).push({
            id: "u4221803",
            container: s
        });
    })();

轻松了解Spring中的控制反转依赖注入(一)

02-27 阅读数 20

https://www.cnblogs.com/xxzhuang/p/5948902.html 博文 来自: qq_38056704的博客

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_66" data-pid="66"><iframe src="https://adaccount.csdn.net/#/preview/575?m=AbtcEQvpEHctScynHcDnJiDitcHinAbtbLXiXAiLLtHJLipvAnyJJtnviHQWSQEEinAfLbnpvmSvQvJEpLAtnUpEpHctJQbiELEQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=AbtcEQvpEHctScynHcDnJiDitcHinAbtbLXiXAiLLtHJLipvAnyJJtnviHQWSQEEinAfLbnpvmSvQvJEpLAtnUpEpHctJQbiELEQ"></div></div>
我的 Input框 不可能这么可爱

09-03 阅读数 1万+

作者:陈大鱼头 github: KRISACHAN

&lt;input /&gt; 标签是我们日常开发中非常常见的替换元素了,但是最近在刷 whattwg 跟 MDN 的时候发现 跟 &lt;in…


博文



我花了一夜用数据结构给女朋友写个H5走迷宫游戏

09-21 阅读数 17万+

起因

又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满!

而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道…


博文



这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案…


博文



nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

10-25 阅读数 1万+

文章目录前言一、nginx简介1. 什么是 nginx 和可以做什么事情2.Nginx 作为 web 服务器3. 正向代理4. 反向代理5. 动静分离6.动静分离二、Nginx 的安装三、 Ngin... 博文

<div class="recommend-item-box recommend-recommend-box"><div><iframe width="900" frameborder="0" height="90" scrolling="no" src="//pos.baidu.com/s?hei=90&amp;wid=900&amp;di=u3491668&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_38122518%2Farticle%2Fdetails%2F80582392&amp;psi=792a7c6cd476d99e71a3042ae2a5df50&amp;ccd=24&amp;ltr=https%3A%2F%2Fblog.csdn.net%2Fqq_38122518%2Farticle%2Fdetails%2F80582392&amp;cce=true&amp;dis=0&amp;cja=false&amp;dc=3&amp;par=1920x1040&amp;pss=1242x10403&amp;cpl=20&amp;dai=4&amp;psr=1920x1080&amp;cec=UTF-8&amp;pcs=1242x615&amp;drs=1&amp;tlm=1574585727&amp;prot=2&amp;exps=111000,110011&amp;ari=2&amp;dri=1&amp;tpr=1574585727757&amp;ps=7547x397&amp;col=zh-CN&amp;cmi=36&amp;cfv=0&amp;cdo=-1&amp;dtm=HTML_POST&amp;chi=1&amp;tcn=1574585728&amp;ant=0&amp;ti=%E8%AF%A6%E8%A7%A3spring%E7%9A%84IOC%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC%E5%92%8CDI%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5&amp;pis=-1x-1"></iframe><ins class="aisbmjb" style="display:none;padding:0px;"></ins></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
【安全】Web渗透测试(全流程)

10-29 阅读数 4604

1 信息收集

1.1域名、IP、端口

域名信息查询:信息可用于后续渗透

IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常

端口信息查询:NMap扫描,确认开放端口
如果不…


博文



动…


博文



<div class="recommend-item-box recommend-recommend-box"><div><iframe width="900" frameborder="0" height="90" scrolling="no" src="https://pos.baidu.com/s?hei=90&amp;wid=900&amp;di=u3491668&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_38122518%2Farticle%2Fdetails%2F80582392&amp;psi=792a7c6cd476d99e71a3042ae2a5df50&amp;drs=1&amp;dri=2&amp;cec=UTF-8&amp;tcn=1574585728&amp;exps=111000,110011&amp;ltr=https%3A%2F%2Fblog.csdn.net%2Fqq_38122518%2Farticle%2Fdetails%2F80582392&amp;cja=false&amp;dc=3&amp;chi=1&amp;ant=0&amp;cfv=0&amp;cdo=-1&amp;ps=8052x397&amp;tpr=1574585727757&amp;prot=2&amp;par=1920x1040&amp;ari=2&amp;tlm=1574585727&amp;cmi=36&amp;dtm=HTML_POST&amp;pcs=1242x615&amp;cce=true&amp;pis=-1x-1&amp;ti=%E8%AF%A6%E8%A7%A3spring%E7%9A%84IOC%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC%E5%92%8CDI%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5&amp;dai=5&amp;psr=1920x1080&amp;pss=1242x10498&amp;col=zh-CN&amp;dis=0&amp;cpl=20&amp;ccd=24"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
Linux/C/C++ 不可错过的好书

10-24 阅读数 1万+

来源:公众号【编程珠玑】

作者:守望先生

ID:shouwangxiansheng

前言

经常有读者让我推荐书籍,这次我就把我私藏的计算机书单分享给你们!不过由于时间匆忙,不会进行更加详细…


博文



漫话:什么是 https ?这应该是全网把 https 讲的最好的一篇文章了

10-26 阅读数 3万+

今天这篇文章,讲通过对话的形式,让你由浅入深着知道,为什么 Https 是安全的。

一、对称加密

一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客…


博文



史上最全的mysql基础教程

10-28 阅读数 1万+

启动与停止

启动mysql服务
sudo /usr/local/mysql/support-files/mysql.server start
停止mysql服务
sudo /usr/loc…


博文



敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自…


博文



史上最全正则表达式语法,文末附常用表达式!

10-28 阅读数 5945

废话少说,直接开始学习!

一、元字符

元字符是构造正则表达式的一种基本元素。

. :匹配除换行符以外的任意字符

w:匹配字母或数字或下划线或汉字

s:匹配任意的空白符

d:匹配数字

b:…


博文



一文搞懂什么是TCP/IP协议

10-28 阅读数 2万+

什么是TCP/IP协议?

计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件…


博文



中国麻将:世界上最早的区块链项目

10-29 阅读数 4万+

中国麻将:世界上最早的区块链项目

最近区块链这个玩意又被市场搞的很是火热,相信大部分人都不太清楚这玩意到底是怎么样的一个概念,它来了,它来了,它到底是啥~ 国家都开始发文支持了,下面是一个通俗易懂的…


博文



比特币原理详解

10-29 阅读数 2万+

一、什么是比特币

比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是…


博文



Python 基础(一):入门必备知识

10-30 阅读数 1万+

Python 入门必备知识,你都掌握了吗? 博文

根据我们的经验,程序员兼职主要分为三种:兼职职位众包、项目整包和自由职业者驻场。

所谓的兼职职位众…


博文



Ngrok: 超简单的内网穿透,了解一下 ?

10-31 阅读数 6629

【1】什么是内网穿透?

首先,我们生活中的网络从应用上可以分为内网和外网;

内网就是你自己的网络环境,就你自己能访问,比如你本地测试进行的localhost;

外网就不言而喻了,你看网页,视频等…


博文



二、Python运算符、条件结构、循环结构

三、Python函数

四、做一次综合练习,做一个控制台…


博文



刷了几千道算法题,这些我私藏的刷题网站都在这里了!

11-08 阅读数 2万+

遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活…

然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交…


博文



JavaScript 为什么能活到现在?

11-08 阅读数 1496

作者 | 司徒正美

责编 |郭芮

出品 | CSDN(ID:CSDNnews)

JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用Ja…


博文



                <div class="recommend-item-box type_hot_word">
                <div class="content clearfix" style="width: 712px;">
                    <div class="float-left">
                                                                            <span>
                            <a href="https://blog.csdn.net/yilovexing/article/details/80577510" target="_blank">
                            python</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/slwbcsdn/article/details/53458352" target="_blank">
                            json</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/csdnnews/article/details/83753246" target="_blank">
                            java</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/qq_35077512/article/details/88952519" target="_blank">
                            mysql</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/pdcfighting/article/details/80297499" target="_blank">
                            pycharm</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/sinyu890807/article/details/97142065" target="_blank">
                            android</a>
                        </span>
                                                    <span>
                            <a href="https://blog.csdn.net/gexiaoyizhimei/article/details/100122368" target="_blank">
                            linux</a>
                        </span>
                                                    <span>
                            <a href="https://download.csdn.net/download/xhg_gszs/10978826" target="_blank">
                            json格式</a>
                        </span>
                                                
                                                                            <span>
                            <a href="https://www.csdn.net/gather_13/MtzaAgxsLWRvd25sb2Fk.html" target="_blank">
                            c# tcp通信客户端类</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_15/MtzaAgysLWRvd25sb2Fk.html" target="_blank">
                            c# 数字转时间</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_11/MtzaAgzsLWRvd25sb2Fk.html" target="_blank">
                            c# 读json</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_13/MtzaAg0sLWRvd25sb2Fk.html" target="_blank">
                            c# 释放文件</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_14/MtzaAg1sLWRvd25sb2Fk.html" target="_blank">
                            c#某个数的模</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_1b/MtzaAg2sLWRvd25sb2Fk.html" target="_blank">
                            c# 更改exe生成名称</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_18/MtzaAg3sLWRvd25sb2Fk.html" target="_blank">
                            c#程序文件写入性能太差</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_1a/MtzaAg4sLWRvd25sb2Fk.html" target="_blank">
                            c#给定5个商品</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_1e/MtzaAg5sLWRvd25sb2Fk.html" target="_blank">
                            c# 异步委托 性能</a>
                        </span>
                                                    <span>
                            <a href="https://www.csdn.net/gather_29/MtzaEgxsLWJsb2cO0O0O.html" target="_blank">
                            c#满足条件跳出循环</a>
                        </span>
                                                                        </div>
                </div>
                </div>
                                <div class="recommend-loading-box">
                <img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
            </div>
            <div class="recommend-end-box">
                <p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
            </div>
        </div>
                        <div class="template-box">
                <span>️2019 CSDN</span><span class="point"></span>
            <span>皮肤主题: 编程工作室</span>
            <span> 设计师:
                                        CSDN官方博客                                    </span>
            </div>
                </main>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44137282/article/details/103226166

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签