[spring] Ioc 基础

  Ioc的理解:调用类对某一接口的实现类的依赖关系又第三方注入,以移除调用类对接口实现类的依赖。又叫做依赖注入。调用者对接口的选择权利被剥夺,交给了第三方。举个例子,学生本来可以选择哪个老师给他上课的,但是这个权利被学校剥夺了,由学校分配学生的老师是谁。

Ioc的类型:

  构造函数:将依赖的对象通过构造函数注入。第三方将需要的对象准备好,在创建对象时通过构造函数传参注入所需对象

  属性:声明依赖的对象,并提供setter/getter方法。第三方通过set方法注入。

  接口:将依赖的对象抽象到接口中,通过实现这个接口方法完成注入。第三方创建需要注入的对象后,通过调用接口方法实现注入。

容器完成注入工作:以上的实现都是由第三方创建所需的注入对象,我们想要把 new 的工作也去掉。

  Ioc原理:spring的实现是通过配置文件注入,原理是java的反射机制,根据类的全限定名找到文件并通过类加载加载并实例化。

  资源访问:加载配置文件

BeanFactory和ApplicationContext:

  BeanFactory面向spring容器底层,ApplicationContext面向开发人员

  BeanFactory:类工厂,创建并管理各种类的对象并交由Spring容器管理。BeanFactory位于顶端,下面提供了不同功能的实现。资源访问的相关类加载配置文件,然后将资源文件给BeanFactory装载,BeanFactory负责创建配置文件中指定的对象(创建的时机是第一调用的时候),并提供方法getBean得到对象。注意BeanFactory的初始化需要Log4j日志配置文件与jar包。

  ApplicationContext:由BeanFactory派生而来,实现了更多实际可用的功能。主要实现类是ClassPathXmlApplicationContext和FileSystemApplicationContext,分别从类路径和文件系统中加载配置文件。初始化ClassPathXmlApplicationContext时直接给定配置文件的路径(可以是多个配置文件,Spring将自动融合),然后就可以调用getBean获取实例了。注意ApplicationContext的初始化和BeanFactory有重大区别就是BeanFactory初始化时不会创建配置文件中的对象,知道第一次调用时才创建,但是ApplicationContext初始化 时就会创建配置文件中配置的对象。

  类注解的配置方式:@Configuration,在该注解的类中,提供实例化对象的方法并以@Bean(name="xxx")。使用ApplicationContext的实现类AnnotationApplicationContext并传入@Configuration注解的类,然后就可以调用getBean获取实例了。

  WebApplicationContext:从web根目录路径装载配置文件,WebApplicationContext可以获得ServletContext的引用,整个web应用上下文对象作为属性传入ServletContext中,为此Spring提供了一个WebApplicationContextUtils,通过该类的getWebApplicationContext(ServletContext sc),可以从ServletContext对象中获取WebApplicationContext。

  Bean的作用域:在非Web环境中,只有singleton和prototype。WebApplicationContext为Bean添加了三个作用域:request,session,global session。

  WebApplicationContext和ServletContext的融合:WebApplicationContext实现了ApplicationContext,并定义了一个常量ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,容器启动时,WebApplicationContext以它为键存放了ServletContext的属性列表,因此可以在web容器(Tomcat)中通过以下方式获取 WebApplicationContext:

WebApplicationContext wpc = ( WebApplicationContext ) ServletContext.getAttribute ( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE );

  WebApplicationContext的初始化:必须在拥有web容器的前提下才能初始化WebApplicationContext,因为它的启动需要ServletContext,我们可以在web.xml中配置自启动的Servlet或者ServletContextListener,借助其中任何一个都可以启动WebApplicationContext。Spring对这两种方式都有相应的实现,分别是:org.springframework.web.context.ContextLoaderListener,org.springframework.web.context.ContextLoaderServlet。我们只需在web.xml中配置即可。同样的需要注意,WebApplicationContext的启动也需要Log4j配置信息。

  父子容器:通过HierarchicalBeanFactory接口,springIoc容器可以创建父子层级关联的容器体系,子容器可以访问符容器的Bean,在容器中,Bean的id必须唯一,但是子容器可以设置和父容器id相同的Bean。这提高了Spring的扩展性,第三方可以通过编程向已经存在的父容器中添加功能。比如SpringMVC,视图层Bean位于子容器中,这样视图层就可以引用业务层和持久层的Bean,但是业务层和持久层的Bean不可见视图层的Bean。

  Bean的生命周期:由多个特定的生命阶段组成,每个阶段都有一个接口,允许外界对Bean加以控制。我们可以从两个层面定义Bean的生命周期,一是Bean的作用范围,二是Bean经历的一系列阶段。

BeanFactory中Bean的生命周期:

  ApplicationContext中Bean的生命周期:

原文地址:https://www.cnblogs.com/ytuan996/p/10629079.html

时间: 2024-11-07 14:28:13

[spring] Ioc 基础的相关文章

Spring ioc基础内容

1 BeanFactory与ApplicationContext区别 BeanFactory是Spring框架中IoC容器的顶层接?,它只是?来定义?些基础功能,定义?些基础规范,?ApplicationContext是它的?个?接?,所以ApplicationContext是具备BeanFactory提供的全部功能的.通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的?级接?,?BeanFactory要拥有更多的功能,?如说国际化?持

浅析 Spring IoC - 基础概念

1. IoC是什么? IoC(Inversion of Control)即控制反转,不是什么技术,而是一种设计思想.在Java开发中,IoC 意味着将你设计好的对象交给容器去控制,而不是传统的在对象内部直接控制(比如说 new 一个对象).理解好 IoC 的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了": 谁控制谁,控制什么:传统Java SE 程序设计,我们直接在对象内部通过 new 创建对象,是程序主动去创建依赖对象:而 IoC 是由 IoC

Spring IOC基础

2.1.1 IOC是什么IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对 象内部直接控制.如何理解好IOC呢?理解好IOC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们 来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象:而IOC是有专

Spring IOC基础使用

先下载.导入核心jar包 编写Book类和CollectionUse类 1 package MyPackageOne; 2 3 public class Book { 4 private String title; 5 private double price; 6 7 public Book() { 8 this("", 0.0); 9 } 10 11 public Book(String title, double price) { 12 this.title = title; 1

spring学习——Ioc基础三(Ioc配置使用)

一.XML配置的结构  一般配置文件结构如下: <beans>       <import resource="resource1.xml"/>       <bean id="bean1"class=""></bean>       <bean id="bean2"class=""></bean>   <bean name=&q

Spring -- IOC/DI 基础概念的理解

Spring -- IOC/DI 基础概念 思维导图: ------------------------------------------------------- IoC/DI 的基本概念 IoC是什么 ? IoC -- Inversion of control, 控制反转   在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则. 理解IoC的关键是明

spring IOC的基础

IOC的基础下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工 作,但对这两个核心模块工作原理和运作机制的理解,对深入理解Spring平台,却是至关重要的:因为,它们同时也是Spring其他模块实现的基础.从 Spring要做到的目标,也就是从简化Java EE开发的出发点来看,简单的来说,它是通过对POJO开发的支持,来具体实现的:具体的说,Spring通过为应用开发提供基于POJO的开发模式,把 应用开发和复

spring学习——Ioc基础二

一.IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装.在Spring中BeanFactory是IoC容器的实际代表者. Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配.一般使用基于xml配置文件进行配置元数据,而且Sprin

Spring IOC之IOC基础

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/bl