传统应用程序示意图
当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图所示:
POJO:
Plain Old Java Objects
简单的Java对象
IOC:
Inversion of Control
控制反转
控制反转还有一个名字叫做依赖注入(Dependency Injection) DI
IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述
DI:
Dependency Injection
依赖注入
AOP:Aspect Oriented Programming
IOC:
Spring IoC容器目的就是管理Bean,这些Bean将根据配置文件中的Bean定义进行创建,而Bean定义在容器内部由BeanDefinition对象表示
IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。
Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。
一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。
IoC容器:
在SpringIoc容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;
而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与AOP集成、国际化处理、事件传播及提供不同层次的context实现 (如针对web应用的WebApplicationContext)。
ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。
简单说, BeanFactory提供了IoC容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。
注意:BeanFactory没有如aop、消息、资源加载、事件等功能
常用容器:
1 XmlBeanFactory:BeanFactory实现,提供基本的IoC容器功能,可以从classpath或文件系统等获取资源;
(1) File file = new File("fileSystemConfig.xml");
Resource resource = new FileSystemResource(file);
BeanFactory beanFactory = new XmlBeanFactory(resource);
(2)
Resource resource = new ClassPathResource("classpath.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
2 ClassPathXmlApplicationContext:
ApplicationContext实现,从classpath获取配置文件;
BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath.xml");
3 FileSystemXmlApplicationContext:
ApplicationContext实现,从文件系统获取配置文件。
BeanFactory beanFactory = new FileSystemXmlApplicationContext("fileSystemConfig.xml");
IoC容器如何工作(xml配置方式):
一、准备配置文件:就像前边Hello World配置文件一样,在配置文件中声明Bean定义也就是为Bean配置元数据。
二、由IoC容器进行解析元数据: IoC容器的Bean Reader读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean。
三、实例化IoC容器:由客户端实例化容器,获取需要的Bean。
实例化Bean:
传统应用程序可以通过new和反射方式进行实例化Bean。而Spring IoC容器则需要根据Bean定义里的配置元数据使用反射机制来创建Bean。
在Spring IoC容器中根据Bean定义创建Bean主要有以下几种方式:
一、使用构造器实例化Bean
使用空构造器进行定义
使用有参数构造器进行定义
使用此中方式,可以使用<constructor-arg >标签指定构造器参数值,
其中index表示位置,value表示常量值,也可以指定引用,指定引用使用ref来引用另一个Bean定义
<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
<!-- 指定构造器参数 -->
<constructor-arg index="0" value="Hello Spring!"/>
</bean>
二、使用静态工厂方式实例化Bean
指定factory-method属性来指定实例化Bean的方法
<!-- 使用静态工厂方法 -->
<bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring!"/>
</bean>
三、使用实例工厂方法实例化Bean
使用factory-bean属性来指定工厂Bean,factory-method属性指定实例化Bean的方法
<!—1、定义实例工厂Bean -->
<bean id="beanInstanceFactory" class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/>
<!—2、使用实例工厂Bean创建Bean -->
<bean id="bean4" factory-bean="beanInstanceFactory"
factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring!"></constructor-arg>
</bean>
相关推荐
在mySpring框架中,我们可以按照上述思路,逐步实现IOC容器和MVC模型。首先,构建一个简单的配置解析器,然后实现bean的实例化和依赖注入。接着,设计Controller的注册和调用机制,以及视图解析过程。最后,将这些...
本文附带了一份详尽的源码,展示了如何利用WPF+MVVM+EFCore+IOC+DI架构来构建一个功能完备的AI Prompt管理应用。这份源码是一个架构设计的Demo,演示了如何在.NET环境下,通过现代软件架构的最佳实践来设计和实现一...
编程语言+JAVAspring+IoC容器+依赖注入**:这是一个关于JAVAspring编程语言的IoC容器的依赖注入的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的IoC容器的概念、原理和作用,以及如何使用JAVAspring...
在 IOC 中,对象的创建和管理由容器(在这里是 Spring 容器)负责,而不是由对象自己。`pom.xml` 文件通常包含项目的依赖管理,可能列出了 spring-context 的依赖,这是实现 IOC 的关键模块。 2. **面向切面编程...
3. **IOC(Inversion of Control)**:IOC 是一种设计模式,通过将控制权从应用程序代码转移给外部容器,实现对依赖关系的解耦。在 ASP.NET MVC 中,IoC 容器(例如 Autofac、Unity 或 Ninject)可以用来管理对象的...
在这个项目中,可能使用了IoC容器(如Autofac或Unity)来管理对象的生命周期和依赖关系,使得组件间的依赖关系不再硬编码,而是通过配置文件或代码来实现。 Entity Framework(EF)是.NET框架的一个对象关系映射...
在Spring.NET中,IOC容器通过以下方式工作: 1. **定义Bean**: Bean是Spring.NET中被管理的对象,通常代表一个业务组件或服务。我们可以通过XML配置文件、Attribute标记或者代码注册来定义Bean。 2. **依赖配置**:...
Spring的IOC容器是其核心特性之一,它负责管理对象的生命周期和依赖关系。开发者定义Bean的配置,而IOC容器负责创建、装配和管理这些Bean。使用XML、注解或者Java配置,可以声明Bean及其依赖。这种方式使得代码更加...
**IOC容器简单实现** IOC(Inversion of Control)容器是软件设计模式中的一种,它将对象的创建和管理权从代码本身转移到一个外部容器,即IOC容器。这种反转控制使得程序更加灵活,降低了组件之间的耦合性,提高了...
当使用IOC时,对象之间的依赖关系被反转,不再由对象自己去查找和管理依赖,而是由Spring容器在运行时动态地注入。这使得对象可以专注于自己的业务逻辑,降低了耦合度。 在Spring 3.1中,IOC主要通过XML配置、注解...
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
在ASP.NET MVC中,IOC容器可以用来管理对象的生命周期,自动注入依赖,使代码更加可测试和可维护。开发者可以通过配置IOC容器(如Unity或Autofac)来控制对象如何被创建和依赖如何被满足。 在"LoggingDemo"这个示例...
**MVC模式与IOC容器互动详解** MVC(Model-View-Controller)模式是一种软件设计模式,常用于构建Web应用程序,以实现业务逻辑、数据处理和用户界面的分离。在这个模式中,Model代表数据模型,负责处理应用程序的...
2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的对象 @Configuration 标注为配置类 @ComponentScan ...
【标题】:“简单IOC容器demo”是一个演示性的项目,它旨在教授如何构建一个基础的控制反转(IOC)容器。这个容器使用注解来实现依赖注入,这是Spring框架的核心特性之一。 【描述】:该示例项目是学习过程的产物,...
《Spring IOC容器实现分析》 在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以...
Spring 框架是 Java 开发中的核心框架之一,它主要由两个重要模块构成:IOC(Inversion of Control,控制反转)和 AOP(Aspect-Oriented Programming,面向切面编程)。这两个概念在现代企业级应用开发中起着至关...
本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...