当前位置: 首页 > 编程日记 > 正文

IOC和DI(转)

1、IoC(Inversion of Control)控制反转和 DI(Dependency Injection)依赖注入

首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。

那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。如果你还不明白的话,我决定放弃。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

转载于:https://www.cnblogs.com/cheng07045406/p/3730060.html

相关文章:

生成公钥链接github

# 生成公钥 连接Git### 1 检查本机是否有公钥 > cd ~/.ssh### 2 如果有的话 直接使用 不要随便删除电脑公钥 没有的话进行生成 生成如下 id_rsa 是 私钥 id_rsa.pub 是公钥 ### 3 生成公钥命令如下 邮箱是你的邮箱地址 终端会提示输入密码 可以以回车带过 如果设置密码…

精确哈克,以贪婪为基础的欺诈式引流法

“ 一种seo手段探讨。”前一段时间,有朋友在后台留言,让我测评一个网站上的信用卡号码生成器:我兴致勃勃,以为是什么黑科技出现了。打开网站,一股熟悉的wordpress风迎面飘来,伴随着风骚的黑色风味。多点击几…

HTML 基础知识(特殊字符的转义)

1. body、head&#xff08;meta&#xff09; <body></body>标签的常见属性&#xff1a; bgcolor&#xff1a;整个页面的背景&#xff1b;text&#xff1a;设置文本颜色link&#xff1a;设置连接颜色&#xff08;&#xff09;&#xff0c;vlink&#xff1a;已经访问…

1 组件化的了解

组件化 概念:讲一个单一的工程的项目&#xff0c;分解成为各个独立的组件&#xff0c;然后按照某一种方式&#xff0c;任意的组织成一个拥有完整业务逻辑的工程 优势 组件的独立–> 独立编写&#xff0c;独立编译&#xff0c;独立运行&#xff0c;独立测试资源的重用–&g…

WebView通过loadDataWithBaseURL加载本地页面卡死

最近开发遇到一个使用 Android WebView加载本地页面进度条始终卡在20%左右不动的情况。打 Log、抓包发现卡在 WebView对象调用 loadDataWithBaseURL方法。 去网上搜了一下解决方案&#xff0c;stackoverflow上有人说是因为 JELLY_BEAN以上版本没有设置 WebView访问文件的权限导…

微信出现“已停止访问该网页”或“关于潜在的违法或违规内容”怎么办?如何获取被屏蔽的网页的网址?...

点击上方↑↑↑蓝字[协议分析与还原]关注我们今天介绍一个微信使用技巧。微信出现“已停止访问该网页”或“关于潜在的违法或违规内容”怎么办&#xff1f;如何获取被屏蔽的网页的网址&#xff1f;由于微信严格的管控措施&#xff0c;经常会导致一些分享的网址被微信屏蔽&#…

self.navigationController push到指定控制器

1 返回到当前页面上面第三级控制器int idx (int)[[self.navigationController viewControllers]indexOfObject:self]; [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(idx -3)] animated:YES];2 //遍…

Google搜索的常用技巧

个人搜索方案 1、选择合适的搜索词&#xff0c;一些行业术语或专家名字可以带来更加高质量的结果。 2、搜索词手动使用空格分隔&#xff0c;先进行第一次搜索&#xff0c;看搜索结果标题是否满足预期&#xff0c;如果不满足&#xff0c;采用更换关键词&#xff0c;添加关键词&a…

hdu 1085 Holding Bin-Laden Captive!

Description We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But recently, it is reported that he hides in Hang Zhou of China! “Oh, God! How terrible! ” Don’t be so afraid, guys. Although he hides in a cave of…

GPS NMEA-0183协议常用报文数据格式

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 整理的GPS有关的协议分析资料。”之前分析一些车载设备的流量时&#xff0c;有部分经验&#xff0c;在这里和大家分享。产生这些流量的设备通常是实体终端设备&#xff0c;里面装有处理芯片&#xff0c;与GPS通信&#xff0c;也通…

【tyvj1052】【树状dp】没有上司的舞会

描述 Ural大学有N个职员&#xff0c;编号为1~N。他们有从属关系&#xff0c;也就是说他们的关系就像一棵以校长为根的树&#xff0c;父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会&#xff0c;要求与会职员的快乐指数最大。但是&#xff0c;没有职员…

java中memcached

http://www.oschina.net/code/snippet_250396_9181 转载于:https://www.cnblogs.com/suifengbingzhu/p/3737053.html

01内存管理-概述

内存管理 内存消耗内存管理模型语言架构减少内存使用的实践 1 内存消耗 栈大小 每一个线程都有专有的栈空间&#xff0c;栈内存在线程存在期间自由使用。 每一个函数都有其自己的栈帧&#xff0c;所有的变量都会载入到方法的栈帧中&#xff0c;并且消耗一定的内存。 &…

linux下unzip解压报错“symlink error: File name too long”怎么办?提供解决方案。

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分享unzip工具的一个bug。”最近在研究菠菜站&#xff0c;中间用到了Spidermonkey&#xff0c;碰到一些小波折&#xff0c;在这里分享出来&#xff0c;以便大家快速跳坑。从全球最大的男性交友网站GitHub上把Spidermonkey-master…

EF-Linq将查询结果转换为Liststring

List<int> id_list new List<int>() { 1 };//测试数据...List<string> guid_list (from uinfo in db.UserInfowhere id_list.Contains(uinfo.ID)select new{uid uinfo.Guid}).ToList().Select(u > u.uid).ToList<string>(); 转载于:https://www.c…

hdu 2594 kmp

这个题和kmp算法的共同点&#xff0c;也就是可以用kmp解的原因&#xff0c;在于当前缀所在串&#xff08;kmp中的模式串&#xff09;字符pj≠后缀所在串(kmp中文本串)字符tj时&#xff0c;应使前缀串(kmp中模式串)尽量往右移动最大位移&#xff0c;而暴力算法则是每次移动位移为…

途游斗地主加密协议分析及破解

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 分析途游斗地主的加密协议。”作为一个手机棋牌游戏厂商&#xff0c;途游是排得上号的&#xff0c;它的途游斗地主一直很火热&#xff0c;隐约记得&#xff0c;这个厂商一直在搞斗地主的全国竞技赛事&#xff0c;并蹭上了体育总局…

URI、URL以及URN的区别

首先&#xff0c;URI&#xff0c;是uniform resource identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。而URL是uniform resource locator&#xff0c;统一资源定位器&#xff0c;它是一种具体的URI&#xff0c;即URL可以用来标识一个资源&#xff0c…

[转]使用设计模式改善程序结构(二)

使用设计模式改善程序结构&#xff08;二&#xff09; 在本系列的 第一篇文章中&#xff0c;描述了如何通过设计模式来指导我们的程序重构过程&#xff0c;并且着重介绍了设计模式意图、动机的重要性。在本文中我们将继续上篇文章进行讨论&#xff0c;这次主要着重于设计模式的…

iOS arm 64 的了解

ARM 简介&#xff1a;ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。百度介绍 iOS设备中的处理器都是基于ARM架构的。 arm设备真机i386&#xff08;iphone5,iphone5s以下的模拟器&#xff09;x86_64(iphone6以上的模拟器…

wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享

点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍TCP排序方法&#xff0c;分享一个Windows版的TCP排序工具。” 在分析协议的过程中&#xff0c;不可避免地需要抓包。 无论抓包条件如何优越&#xff0c;无论Windows下使用wireshark还是Linux下使用tcpdump&#xff0c;无论是…

USACO JANUARY——矩形[rects]

Description 给出N个矩形(1≤N≤100)和它的长和宽(不超过1000)&#xff0c;写一个程序找出最大的K&#xff0c;使得有K个矩形满足层层包含的关系&#xff0c;即里层的矩形被所有外层的矩形包含&#xff0e;一个矩形P1包含另一个矩形P2&#xff0c;则P2的一边小于P1的一边&#…

ORACLE分页SQL

ORACLE分页SQL 1&#xff0c;使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM < 40 ) WHERE RN > 21 2&#xff0c;使用between SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) W…

01-基本概念

GCD 1 基本概念 概念&#xff1a; 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务 优点 多核并行运算不需要手动管理线程生命周期自动利用CPU的内核 两个基本点…

cocos2d游戏jsc文件格式解密,SpideMonkey大冒险

点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 介绍cocos2d游戏中常用的jsc格式文件的解密。” 01 — 在破解游戏应用中&#xff0c;经常会碰到后缀为jsc的文件&#xff0c;这是基于cocos2d开发的游戏的加密代码&#xff0c;本质上是js文件&#xff0c;只是被加密了。 例如之前…

02-dispatch_barrier

1 dispatch_barrier_async 概念 栅栏方法&#xff0c;暂时的将一部操作做成一个同步操作&#xff0c;向一个栅栏一样的分开 dispatch_barrier_async函数的作用是在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后…

sqljdbc.jar 和 sqljdbc4.jar

从微软官网下载的Sql server2008的JDBC jar包&#xff0c;解压后里面有两个jar包&#xff08;sqljdbc.jar 和 sqljdbc4.jar&#xff09;。到底应该用哪个呢&#xff1f; 地址&#xff1a; http://www.microsoft.com/downloads/details.aspx?FamilyIDa737000d-68d0-4531-b65d-d…

综合性深入的技术文章-20161103

已读文章&#xff1a; SqlServer性能检测和优化工具使用详细 百万级访问网站前期的技术准备 从100PV到1亿级PV网站架构演变 待阅读&#xff1a; 从0到千万级访问量网站架构演变史 memcached全面剖析–5. memcached的应用和兼容程序 PHP解决网站大流量与高并发 NGINX防御CC攻击教…

头条小视频和西瓜视频signature签名算法

点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析今日头条内小视频和西瓜视频分享后浏览器打开所用的signature签名算法。” 上月写的一篇关于使用微信的wxid加好友的文章&#xff0c;竟然无意间碰到了一个微信搜索黑洞&#xff0c;成就了本号有史以来搜索量、阅读量、关注度…

一个winform带你玩转rabbitMQ

源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一、安装部署初探 二、进阶 三、api相关 安装 部署 初探 先上图 一. 安装部署 下载 rabbitMQ &#xff1a;http://www.rabbitmq.com/download.html 安装rabbitmq需要erlang&#xff0c;下载erlang&#xff1a;ht…