`
C_J
  • 浏览: 129248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

随笔:用spring之前对IOC的体会

阅读更多
    第一次接触IOC是还在大学的时候,那时候还什么都不懂,不懂OO,不懂设计模式,只知道要用什么就new什么,也没人管我们,老师更不管,那时老师还没先进到工厂模式上,如果说new的方式是原始社会的话,那么我很不幸的说,那会却生活在原始社会。
    如果说IOC是资本主义社会的话,那么我想我那会还没体会到资本主义的优越性。毕业1年了,也在大型项目里奋斗着,在工作中,上头不会管你如何实现,而关心的是东西的可靠性、可维护性、可配性、系统边界、系统交互等,而软件工程的命运完全掌握在自己手里。
    所以我想这1年里,我更多地是自己写配置文件和设计模式,自己思考聚合和耦合是什么东西,听说设计模式是前人的的精华,所以我奋力取之而不亦乐乎。似乎也很奇怪,如果说设计模式是社会主义社会,项目组似乎都在社会主义社会里构建起几乎所有构架。

    也不怕大家笑话,确实没用过spring,对spring了解甚少,但相信很多东西都是想通的,现在去重温大学时代那个的IOC之时,确有新的感悟。
    IOC的思想最早是1996年从C++领域提出来的,虽然OO的流行大大提高了重用性和可扩展性,可当时人们可能还是觉得业务模块还不够清晰、也不够灵活,各种业务逻辑里弥漫着设计模式“冗余”代码,从而想剥离这部分,随之而然,IOC的思想浮出水面。

    关于可配
    把这种组织工作转移给框架(比如spring容器),编译期不必知道是谁来实现,而只关心业务逻辑,并装载这些组件的工作在运行期通过配置来确定,如果说设计模式是一种代码级的硬耦合,那么IOC是一种配置级的硬耦合吧?!不过给人的感觉修改配置文件比修改代码的可配性要高。

    关于解耦
    想想,在设计模式上,调用类用工厂模式请求了被调用类,看上去被写死在代码级别上了,所以是编译期确定。
    在IOC上,宿主类在代码级别上不关心具体哪个类去实现,只要“未知类”实现了我的接口就行,在运行期由容器去加载实现类,所以可以运行期确定。

    嗯,看来我似乎是一步步走过来的?也是被教育毒害的孩子。

    接受新事务之前,我心存怀疑,IOC的缺点是什么?或者该踏入Ruby的海洋?

    关于效果
以上纯属个人的理解,有不正确之处,还请批评和指正。

---------------------------cut line-------------------

之前对AOP的理解不到位,这里只论IOC的思想,感谢hippostart、rainsilence、云中苍月的提醒,其他补充如下:
已改,是我理解错了,IOC和AOP这两个东西不属于同一概念,概念被混淆了。

因为中文一下字没有找到有效信息,就用google.com找到如下:

Asking for differences between IoC and AOP is kind of like asking the difference between apples and oranges.

Aspect-Oriented Programming (AOP) is concerned mainly with abstracting functionality that applies across the board to many components of your application. For example, logging and security. These have little or nothing to do with the actual business functionality but are essential system-wide functions nonetheless.

Inversion of Control (IoC), a.k.a. Dependency Injection (DI) is concerned with maintaining loose coupling and managing the dependencies between the components of an application. 

两个概念就像苹果和橘子,AOP主要关心那些用于组件的所有公共功能,像日志,安全等,而IOC主要是达到组件间的松耦合。

Aspect-Oriented Programming (AOP) complements OOP by providing another way of thinking about program structure. While OO decomposes applications into a hierarchy of objects, AOP decomposes programs into aspects or concerns. This enables modularization of concerns such as transaction management that would otherwise cut across multiple objects. (Such concerns are often termed crosscutting concerns.)


--->截自http://static.springsource.org/spring/docs/1.2.x/reference/aop.html







分享到:
评论
25 楼 chris_zley 2010-07-12  
没想到有比我还菜的
24 楼 rayleeya 2010-07-12  
Spring Hibernate 就是垃圾,浅显的道理,整出一大堆晦涩的概念,国内的一帮S B写了一坨坨的屎。
23 楼 s-s-h 2010-07-12  
LZ这个帖子虽然混淆了AOP与IOC的概念,但立刻得到指正,对LZ大有裨益
但就像LS有一位说的,最好还是能现google或baidu之后,再发帖
同样的事情发生一次是失误,再发生就是态度问题
22 楼 dsea 2010-07-12  
kevin_wanwei 写道
感觉像幼儿园的学生写作文。

又本事你写一篇看看,只有自己能写出更好的,才有资格评论别人
21 楼 tianlang0101 2010-07-12  
理解确实还没到位~
20 楼 treemap 2010-07-11  
hippostart 写道
楼上各位的回复的确有点狠,谁不是一步步走过来呢,没说对直接指出来就可以了,没必要句句刺人。
回楼主:ioc和Aop是不同的,你本文说的应该是Ioc,而且体会到位,而Aop是切面介入的模式,我用手机发帖,就不细讲了,你阅读一下Spring中文手册就有答案了

有些人 自以为是啊。

我挺楼主!
19 楼 roadray 2010-07-11  
我们要做的是纠正LZ理解上的错误,而非讽刺
18 楼 sarin 2010-07-11  
new->反射->IOC,这么用是在进步么?
17 楼 sdtm1016 2010-07-11  
看下aopalliance.jar这个包,就几个类,也许理解的会深一些
16 楼 kevin_wanwei 2010-07-11  
感觉像幼儿园的学生写作文。
15 楼 edgar615 2010-07-11  
IOC是IOC,AOP是AOP,不过spring里的AOP是不是基于IOC实现的不是很清楚
没有涉及到过AOP方面的经验
14 楼 agao1985 2010-07-11  
这个论坛比较专业 牛人都很多 。所以楼主也别太在意了 干发帖就值得表扬 大家也不要言辞太过激烈了
13 楼 yangyi 2010-07-11  
IoC本质上是对工厂模式的改进,体现的是对于抽象的依赖,而AOP选择那些正交的方法去除显式的依赖。
12 楼 rainv 2010-07-11  
我不同意这点:
那么IOC是一种配置级的硬耦合吧?

配置文件可以很容易被改再reload的。。。。。

11 楼 erikchang 2010-07-11  
rainsilence 写道
C_J 写道
kjj 写道
把aop和ioc混为一谈,你就不能google一下再发帖吗!!

我google出来的结果,经自己的理解后是:AOP是面向切面编程,和OP、OO同属同一层概念,而IOC是AOP的基础或者说实现方式,
OO编程是把数据和动作抽象化,通过new出对象或者运用一定设计模式组织这些对象,而AOP更想支离出那些非业务逻辑,降低对象间的耦合性,让框架自己管理组件关系而提出来的。

以上都是自己的理解。
如果有不对的地方,你完全可以提出来。
你也完全可以说说自己的理解。
有必要用“小学生写的作文”等话来讽刺?呵呵
我只是有点好奇,当你写这句话的时候? 到底是个什么心态呢?




lz说:IOC是AOP的基础或者说实现方式。。。。

我觉得你应该继续google。。。。

还有文章标题应该改为对IOC的体会。。。

呵呵,这里发帖也注意,容易被和谐了!
10 楼 C_J 2010-07-11  
rainsilence 写道
C_J 写道
kjj 写道
把aop和ioc混为一谈,你就不能google一下再发帖吗!!

我google出来的结果,经自己的理解后是:AOP是面向切面编程,和OP、OO同属同一层概念,而IOC是AOP的基础或者说实现方式,
OO编程是把数据和动作抽象化,通过new出对象或者运用一定设计模式组织这些对象,而AOP更想支离出那些非业务逻辑,降低对象间的耦合性,让框架自己管理组件关系而提出来的。

以上都是自己的理解。
如果有不对的地方,你完全可以提出来。
你也完全可以说说自己的理解。
有必要用“小学生写的作文”等话来讽刺?呵呵
我只是有点好奇,当你写这句话的时候? 到底是个什么心态呢?




lz说:IOC是AOP的基础或者说实现方式。。。。

我觉得你应该继续google。。。。

还有文章标题应该改为对IOC的体会。。。



嗯,已改,是我理解错了,这两个东西不属于同一概念。

因为中文一下字没有找到有效信息,就用google.com找到如下:

Asking for differences between IoC and AOP is kind of like asking the difference between apples and oranges.

Aspect-Oriented Programming (AOP) is concerned mainly with abstracting functionality that applies across the board to many components of your application. For example, logging and security. These have little or nothing to do with the actual business functionality but are essential system-wide functions nonetheless.

Inversion of Control (IoC), a.k.a. Dependency Injection (DI) is concerned with maintaining loose coupling and managing the dependencies between the components of an application. 

两个概念就像苹果和橘子,AOP主要关心那些用于组件的所有公共功能,像日志,安全等,而IOC主要是达到组件间的松耦合。

Aspect-Oriented Programming (AOP) complements OOP by providing another way of thinking about program structure. While OO decomposes applications into a hierarchy of objects, AOP decomposes programs into aspects or concerns. This enables modularization of concerns such as transaction management that would otherwise cut across multiple objects. (Such concerns are often termed crosscutting concerns.)






9 楼 hippostart 2010-07-11  
楼上各位的回复的确有点狠,谁不是一步步走过来呢,没说对直接指出来就可以了,没必要句句刺人。
回楼主:ioc和Aop是不同的,你本文说的应该是Ioc,而且体会到位,而Aop是切面介入的模式,我用手机发帖,就不细讲了,你阅读一下Spring中文手册就有答案了
8 楼 云中苍月 2010-07-11  
C_J 写道
kjj 写道
把aop和ioc混为一谈,你就不能google一下再发帖吗!!

我google出来的结果,经自己的理解后是:AOP是面向切面编程,和OP、OO同属同一层概念,而IOC是AOP的基础或者说实现方式,
OO编程是把数据和动作抽象化,通过new出对象或者运用一定设计模式组织这些对象,而AOP更想支离出那些非业务逻辑,降低对象间的耦合性,让框架自己管理组件关系而提出来的。

以上都是自己的理解。
如果有不对的地方,你完全可以提出来。
你也完全可以说说自己的理解。
有必要用“小学生写的作文”等话来讽刺?呵呵
我只是有点好奇,当你写这句话的时候? 到底是个什么心态呢?


“小学生写的作文”的说法言辞比较直接,可能刺伤楼主自尊了。不过在我看来,实话实说,这个评价挺准确……希望楼主能多学习和阅读前辈高人关于AOP以及IOC(DI)的文章,并且多多应用实践,等有了切身体会后再发帖不迟。

论坛有风险,发帖需谨慎。
7 楼 rainsilence 2010-07-11  
C_J 写道
kjj 写道
把aop和ioc混为一谈,你就不能google一下再发帖吗!!

我google出来的结果,经自己的理解后是:AOP是面向切面编程,和OP、OO同属同一层概念,而IOC是AOP的基础或者说实现方式,
OO编程是把数据和动作抽象化,通过new出对象或者运用一定设计模式组织这些对象,而AOP更想支离出那些非业务逻辑,降低对象间的耦合性,让框架自己管理组件关系而提出来的。

以上都是自己的理解。
如果有不对的地方,你完全可以提出来。
你也完全可以说说自己的理解。
有必要用“小学生写的作文”等话来讽刺?呵呵
我只是有点好奇,当你写这句话的时候? 到底是个什么心态呢?




lz说:IOC是AOP的基础或者说实现方式。。。。

我觉得你应该继续google。。。。

还有文章标题应该改为对IOC的体会。。。
6 楼 C_J 2010-07-11  
kjj 写道
把aop和ioc混为一谈,你就不能google一下再发帖吗!!

我google出来的结果,经自己的理解后是:AOP是面向切面编程,和OP、OO同属同一层概念,而IOC是AOP的基础或者说实现方式,
OO编程是把数据和动作抽象化,通过new出对象或者运用一定设计模式组织这些对象,而AOP更想支离出那些非业务逻辑,降低对象间的耦合性,让框架自己管理组件关系而提出来的。

以上都是自己的理解。
如果有不对的地方,你完全可以提出来。
你也完全可以说说自己的理解。
有必要用“小学生写的作文”等话来讽刺?呵呵
我只是有点好奇,当你写这句话的时候? 到底是个什么心态呢?


====》以上理解不正确,IOC和AOP不属于同一概念。

相关推荐

    SpringMvc依赖完整jar

    - `spring-core.jar`:提供 IoC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)的核心实现,是整个 Spring 框架的基础。 - `spring-beans.jar`:包含 Bean 定义和管理,以及相关配置...

    java记录随笔

    Session Bean 负责业务处理,但采用 EJB 系统对业务架构模式改变太大, Spring 作为一个轻量级架构,漂亮的 IOC 模式实现,对业务架构影响小。 在用户结构层,Struts 和 Tapestry 是两种实现 MVC 架构的优秀框架,...

    Java的动态代理机制详解

    对于IoC,依赖注入不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理是java的动态代理机制,所以本篇随笔是对java的...

    DeepSeek入门宝典:赋能开发者实战的高性能AI解决方案

    内容概要:本文档详细介绍了 DeepSeek 这一高效、经济的人工智能解决方案,旨在为企业端、产品端以及开发者提供深度技术支持。对于企业而言,DeepSeek 带来了显著的成本效益和生产效率提升;而对于具体的产品和服务,它增强了用户体验的质量。特别是针对开发者,文档深入浅出地讲解了如何利用 DeepSeek 实现自动化代码生成、改写等辅助开发功能,并且提供了具体的步骤指导以满足不同环境下的部署需求,包括直接通过官方API接入、本地私有化部署或借助云平台进行托管的方式。 适合人群:希望降低开发门槛,提高工作效率的软件工程师和技术团队。 使用场景及目标:开发者可以根据自身条件选择最适合自己的部署方案来整合 DeepSeek 技术,进而达到优化编码过程、减少人为错误的目的。 其他说明:文中还包括了许多实际操作的例子,如通过代码改写的实例来展示如何改进现有程序段落,还有详细的API使用指南帮助初学者快速上手DeepSeek。此外,还提供了大量外部参考资料链接以便进一步扩展知识和技能范围。

    lusted_3cd_01_0318.pdf

    lusted_3cd_01_0318

    开源AI工具下载——Cherry-Studio-1.0.1-MACOS arm64版

    Cherry Studio是一款支持多模型服务的 Windows/macOS GPT 客户端。通过与Ollama搭配,搭建个人本地AI大模型

    chromedriver-win64-136.0.7058.0.zip

    chromedriver-win64-136.0.7058.0.zip

    matlab程序代码项目案例:使用 Simulink 进行自适应 MPC 设计

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    mellitz_3cd_01_1116.pdf

    mellitz_3cd_01_1116

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    steenman_01_0908.pdf

    steenman_01_0908

    [AB PLC例程源码][MMS_047737]System Time 64Bit Interpreted AOI.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    stone_3ck_01a_0518.pdf

    stone_3ck_01a_0518

    [AB PLC例程源码][MMS_041473]Input Time Stamping.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3cd_01_1117.pdf

    lusted_3cd_01_1117

    2010-2023年 上市公司-管理层情感语调数据.zip

    管理层情感语调,或称为管理层语调,是一个在财务与会计领域中常用的概念,特别是在分析上市公司信息披露质量时。它主要指的是管理层在上市公司文字信息披露过程中,用词所体现出的情感倾向和可理解性。 本数据复刻了《财经研究》《中南财经政法大学学报》等顶级期刊的核心解释变量的做法。情感语调对企业未来盈余和未来绩效具有较强解释力、降低会计信息误定价、为分析师预测提供增量信息,而投资者也会对管理层情感语调做出积极反应。 情感语调1=(正面词汇数量-负面词汇数量)/词汇总量;数值越大,情感倾向越偏向正面积极。 情感语调2=(正面词汇数量-负面词汇数量)/(正面词汇数量+负面词汇数量);数值越大,情感倾向越偏向正面积极。 指标 证券代码、企业代码、年份、证券简称、行业代码、行业名称、正面词汇数量、负面词汇数量、词汇总量、句子数量、文字数量、情感语调1、情感语调2。

    mellitz_3cd_02_0318.pdf

    mellitz_3cd_02_0318

    moore_01_0909.pdf

    moore_01_0909

    lusted_3ck_02a_0119.pdf

    lusted_3ck_02a_0119

    pimpinella_3cd_01_0916.pdf

    pimpinella_3cd_01_0916

Global site tag (gtag.js) - Google Analytics