第一次接触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
分享到:
相关推荐
spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和Classpath扫描 spring-expression:表达式语句 切面编程: spring-aop:面向切面编程,CGLB,JDKProxy spring-aspects:集成...
《Spring入门:Spring概述与Spring IoC》是针对初学者的一篇教程,旨在引导开发者进入Spring框架的世界。本文将深入探讨Spring的核心概念,特别是Spring的Inversion of Control(IoC,控制反转)特性,以及如何在...
1. **读取配置**:Spring容器读取XML、Java配置或基于注解的配置信息,构建BeanDefinition对象,其中包含了对象的类名、属性、依赖等信息。 2. **Bean实例化**:根据BeanDefinition,Spring容器创建Bean实例,可以是...
Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...
基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)...
1. 创建项目和配置文件:在使用 Spring IOC 之前,需要创建一个项目并配置相关的依赖项。pom.xml 文件是 Maven 项目的核心配置文件,用于管理项目的依赖项。在 pom.xml 文件中,需要添加 Spring IOC 相关的依赖项,...
#### BeanFactory与ApplicationContext:Spring的两大IOC容器 Spring框架提供了多种IOC容器,其中最基础的是`BeanFactory`接口,它定义了Spring IOC容器的基本功能。`BeanFactory`主要关注于对象的创建和依赖关系的...
5. **Bean的生命周期**:Spring容器对Bean的生命周期进行管理,包括初始化、正常使用、销毁等阶段,开发者可以自定义生命周期回调方法以进行特定操作。 ### Spring AOP **面向切面编程(AOP)** 是Spring的另一个...
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
6. **模块化设计**:Spring 框架由多个模块组成,如核心容器、数据访问/集成、Web 模块等,开发者可以根据需求选择使用,避免了“大一统”框架带来的复杂性。 7. **可扩展性和维护性**:Spring 通过运行时组装组件...
1. **配置文件**:Spring通常使用XML配置文件来声明和管理bean。在案例中,可能会有一个名为`beans.xml`的配置文件,其中定义了bean的实例化、属性配置以及它们之间的依赖关系。 2. **Bean的声明**:在`beans.xml`...
* IoC容器(Inversion of Control):Spring的核心是IoC容器,IoC容器负责管理Bean的生命周期和依赖关系。 * 依赖注入(Dependency Injection): Spring使用依赖注入来解耦合应用程序中的组件,提高系统的灵活性...
7. ** ApplicationContext**:Spring应用上下文是IOC容器的实现,提供了获取Bean、事件发布等功能。`TestSpringIoc`可能创建ApplicationContext实例,并通过它来获取和操作Bean。 通过`TestSpringIoc`的测试,我们...
- **基于代理的AOP**:Spring使用JDK动态代理或CGLIB动态代理创建目标对象的代理,代理对象在调用目标方法前后执行切面逻辑。 - **基于注解的AOP**:Spring支持在方法上直接定义切面注解,如`@Before`, `@After`, `...
5. **Bean的生命周期**:Spring容器管理Bean的整个生命周期,包括实例化、初始化、使用和销毁。开发者可以通过实现特定接口或使用注解来定制Bean的生命周期行为。 6. **自动装配**:Spring提供了一种自动装配Bean...
这个压缩包包含的是Spring框架的IOC(Inversion of Control)核心组件的jar包,是理解和使用Spring进行应用程序开发的基础。 **IOC容器** IOC,或称DI,是Spring的核心特性,它使得开发者可以将对象的创建和管理...
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
6. **AOP(面向切面编程)集成**:Spring的IOC容器与AOP模块紧密集成,可以方便地实现切面编程,提供声明式事务管理等功能。 7. **资源加载**:Spring容器可以从不同的来源加载Bean定义,如XML文件、Java配置类、@...
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...