Spring IoC 容器的概念

在这里插入图片描述IoC 是控制反转的意思,简单来说,就是创建对象的时候不是你主动创建,而是由 Spring 框架负责控制对象的生命周期和对象间的关系。
Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件,这些对象被称为 Spring Beans。Spring IoC 容器的设计Spring IoC 容器的设计主要是基于 BeanFactory 和 ApplicationContext 两个接口,其中 ApplicationContext 是 BeanFactory 的子接口。在绝大部分工作场景下,我们都是使用 ApplicationContext 作为 Spring IoC 的容器。被称作 Bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的,可以通过XML或者注解创建。Spring IoC 和 Bean 的关系如下图。springbean-ioc.jpg下面通过一个例子来加深理解。新建一个 Maven 项目,在 pom.xml 中添加 Spring 依赖。<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.wyk springdemo 1.0-SNAPSHOT <spring.version>4.3.18.RELEASE</spring.version> org.springframework spring-beans s p r i n g . v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . s p r i n g f r a m e w o r k < / g r o u p I d > < a r t i f a c t I d > s p r i n g − c o n t e x t < / a r t i f a c t I d > < v e r s i o n > {spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version> spring.version</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>springcontext</artifactId><version>{spring.version} 在项目中添加一个实体类 Drinks 。package com.wyk.springdemo.pojo;public class Drinks { private String fruit; //水果类型 private String sugar; // 糖分描述 private Integer size; // 型号 public String getFruit() { return fruit; } public void setFruit(String fruit) { this.fruit = fruit; } public String getSugar() { return sugar; } public void setSugar(String sugar) { this.sugar = sugar; } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } @Override public String toString() { return “一杯型号为” + this.size + this.sugar + this.fruit; }}在 src/main/resources 下面创建一个XML配置文件 spring-cfg.xml 。在文件中定义一个和上面实体类相关的 bean 。<?xml version="1.0" encoding="UTF-8"?> 创建一个主应用程序类,调用前面的实体类。运行程序,可以打印出实体类。package com.wyk.springdemo;import com.wyk.springdemo.pojo.Drinks;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String[] args) { // 初始化ApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext(“spring-cfg.xml”); // 获取bean Drinks orange = (Drinks)ctx.getBean(“orangeJuice”); System.out.println(orange); }}多个 bean 之间可以相互引用。 新建实体类 JuiceMaker 。package com.wyk.springdemo.pojo;public class JuiceMaker { private String beverageShop; private Drinks source; public String getBeverageShop() { return beverageShop; } public void setBeverageShop(String beverageShop) { this.beverageShop = beverageShop; } public Drinks getSource() { return source; } public void setSource(Drinks source) { this.source = source; } public String makeJuice() { String juice = “这是一杯由” + beverageShop + “饮品店, 提供的型号为” + source.getSize() + source.getSugar() + source.getFruit(); return juice; }}在 spring-cfg.xml 中,添加新实体类的 bean , 并引用原来的 bean 。 在主程序中获取 bean 。public class MainApp { public static void main(String[] args) { // 初始化ApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext(“spring-cfg.xml”); JuiceMaker maker = (JuiceMaker)ctx.getBean(“juiceMaker”); System.out.println(maker.makeJuice()); }}运行程序,可以查看结果。[图片上传失败…(image-75819c-1549887547771)]Spring IoC 容器初始化Spring IoC 容器初始化包括2个步骤,即 bean 的定义和依赖注入。bean 的定义分成3步:Resource定位。Spring IoC根据开发者的配置定位资源,包括通过XML或者注解等。BeanDefination 的载入。将Resource定位到的信息,保存到 Bean 定义中。BeanDefination 的注册。 将 BeanDefination 中的信息发布到 Spring IoC 容器中。三步完成后, Bean就在 Spring IoC 容器中被定义了,但并没有被初始化。 Bean 有一个配置选项 lazy-init 。其含义是是否初始化 Spring Bean 。默认值为 false ,即默认会自动化初始 Bean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值