`
uule
  • 浏览: 6359183 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

IOC + 容器

 
阅读更多

跟开涛学Spring

 

传统应用程序示意图

 

 

当有了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>  

 

 

分享到:
评论

相关推荐

    spring ioc+mvc代码

    在mySpring框架中,我们可以按照上述思路,逐步实现IOC容器和MVC模型。首先,构建一个简单的配置解析器,然后实现bean的实例化和依赖注入。接着,设计Controller的注册和调用机制,以及视图解析过程。最后,将这些...

    .NET桌面应用架构Demo与实战-WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper

    本文附带了一份详尽的源码,展示了如何利用WPF+MVVM+EFCore+IOC+DI架构来构建一个功能完备的AI Prompt管理应用。这份源码是一个架构设计的Demo,演示了如何在.NET环境下,通过现代软件架构的最佳实践来设计和实现一...

    编程语言+JAVAspring+IoC容器+依赖注入

    编程语言+JAVAspring+IoC容器+依赖注入**:这是一个关于JAVAspring编程语言的IoC容器的依赖注入的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的IoC容器的概念、原理和作用,以及如何使用JAVAspring...

    手写spring框架ioc+aop+mvc

    在 IOC 中,对象的创建和管理由容器(在这里是 Spring 容器)负责,而不是由对象自己。`pom.xml` 文件通常包含项目的依赖管理,可能列出了 spring-context 的依赖,这是实现 IOC 的关键模块。 2. **面向切面编程...

    C#MVC+IOC+EF+SQLite源码,学习用

    3. **IOC(Inversion of Control)**:IOC 是一种设计模式,通过将控制权从应用程序代码转移给外部容器,实现对依赖关系的解耦。在 ASP.NET MVC 中,IoC 容器(例如 Autofac、Unity 或 Ninject)可以用来管理对象的...

    MVC+IOC+EF+SQLite源码,学习用

    在这个项目中,可能使用了IoC容器(如Autofac或Unity)来管理对象的生命周期和依赖关系,使得组件间的依赖关系不再硬编码,而是通过配置文件或代码来实现。 Entity Framework(EF)是.NET框架的一个对象关系映射...

    spring net IOC+AOP 源码 网络收集

    在Spring.NET中,IOC容器通过以下方式工作: 1. **定义Bean**: Bean是Spring.NET中被管理的对象,通常代表一个业务组件或服务。我们可以通过XML配置文件、Attribute标记或者代码注册来定义Bean。 2. **依赖配置**:...

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    Spring的IOC容器是其核心特性之一,它负责管理对象的生命周期和依赖关系。开发者定义Bean的配置,而IOC容器负责创建、装配和管理这些Bean。使用XML、注解或者Java配置,可以声明Bean及其依赖。这种方式使得代码更加...

    IOC容器简单实现

    **IOC容器简单实现** IOC(Inversion of Control)容器是软件设计模式中的一种,它将对象的创建和管理权从代码本身转移到一个外部容器,即IOC容器。这种反转控制使得程序更加灵活,降低了组件之间的耦合性,提高了...

    Spring3.1 IOC+AOP需要的jar包

    当使用IOC时,对象之间的依赖关系被反转,不再由对象自己去查找和管理依赖,而是由Spring容器在运行时动态地注入。这使得对象可以专注于自己的业务逻辑,降低了耦合度。 在Spring 3.1中,IOC主要通过XML配置、注解...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    ASP.NET+MVC+ENTLIB+LOG4NET+IOC

    在ASP.NET MVC中,IOC容器可以用来管理对象的生命周期,自动注入依赖,使代码更加可测试和可维护。开发者可以通过配置IOC容器(如Unity或Autofac)来控制对象如何被创建和依赖如何被满足。 在"LoggingDemo"这个示例...

    MVC与IOC容器互动

    **MVC模式与IOC容器互动详解** MVC(Model-View-Controller)模式是一种软件设计模式,常用于构建Web应用程序,以实现业务逻辑、数据处理和用户界面的分离。在这个模式中,Model代表数据模型,负责处理应用程序的...

    IoC容器的设计(利用反射、注解和工厂模式实现)

    2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的对象 @Configuration 标注为配置类 @ComponentScan ...

    简单IOC容器demo

    【标题】:“简单IOC容器demo”是一个演示性的项目,它旨在教授如何构建一个基础的控制反转(IOC)容器。这个容器使用注解来实现依赖注入,这是Spring框架的核心特性之一。 【描述】:该示例项目是学习过程的产物,...

    Spring IOC容器实现分析.pdf 下载

    《Spring IOC容器实现分析》 在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以...

    spring ioc+aop.zip

    Spring 框架是 Java 开发中的核心框架之一,它主要由两个重要模块构成:IOC(Inversion of Control,控制反转)和 AOP(Aspect-Oriented Programming,面向切面编程)。这两个概念在现代企业级应用开发中起着至关...

    手写一个SpringIoc容器

    本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...

Global site tag (gtag.js) - Google Analytics