spring入门——IOC容器

spring入门——IOC容器

1.IoC 容器介绍

  • Spring容器是Spring框架的核心,容器将创建对象,把它们连在一起,配置它们,并且管理它们整个生命周期从创建到销毁。Spring容器使用依赖注入(DI)来管理应用程序的组件,这些对象称为Spring Beans.
  • IOC容器具有依赖注入的功能,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。

2.Spring 的 BeanFactory 容器

  • BeanFactory是最简单的容器,主要功能是为依赖注入提供支持。这个容器接口在 org.springframework.beans.factory.BeanFactor 中被定义。

    例子:

第一步,创建一个 HelloWord.java文件

package com.zq;

public class HelloWord {
  private String message;

  public void setMessage(String message) {
      this.message = message;
  }

  public void getMessage() {
      System.out.println("Your Message :" + message);
  }
}

第二步,创建一个 MainApp.java文件

package com.zq;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainApp {
   public static void main(String[] args) {
      XmlBeanFactory factory = new XmlBeanFactory = (new ClassPathResource("Beans.xml"));
      HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
      obj.getMessage();
   }
}

第三步,在resources下建立Beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.zq.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

输出控制台结果:

Your Message : Hello World!

3.Spring ApplicationContext 容器

  • Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文。
    Application Context 是 spring 中较高级的容器。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。 这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
    ApplicationContext 包含 BeanFactory 所有的功能,一般情况下,相对于 BeanFactory,ApplicationContext 会更加优秀。当然,BeanFactory 仍可以在轻量级应用中使用,比如移动设备或者基于 applet 的应用程序。
    例子:

第一步,创建一个 HelloWord.java文件

package com.zq;

public class HelloWord {
  private String message;

  public void setMessage(String message) {
      this.message = message;
  }

  public void getMessage() {
      System.out.println("Your Message :" + message);
  }
}

第二步,创建一个 MainApp.java文件

package com.zq;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = ApplicationContext ClassPathResource("Beans.xml"));
      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
   }
}

第三步,在resources下建立Beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.zq.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

输出控制台结果:

Your Message : Hello World!

4.Spring中Bean的定义

  • 被称作bean的对象是应用程序的支柱也是有Spring IOC容器管理的,bean是一个实例化的,组装,并通过Spring IOC容器管理的对象,这些bean是由容器提供的元数据创建的。bean 定义包含称为配置元数据的信息,下述容器也需要知道配置元数据:
    • 如何创建一个 bean
  • bean 的生命周期的详细信息
  • bean 的依赖关系
属性描述
class这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
name这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
scope这个属性是指由特定bean定义创建对象的作用域
constructor用来注入依赖关系的
lazy-initializations延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
initialization 方法在 bean 的所有必需的属性被容器设置之后,调用回调方法
destruction 方法当包含该 bean 的容器被销毁时,使用回调方法。

5.Spring Bean的作用域

  • 当在spring中声明一个bean时,必须得声明bean的作用域选项。例如,为了强制spring每次在需要的时候都要产生一个新的bean实例,作用域必须得声明为prototype。如果想要spring每次需要的时候返回原来的bean实例,作用域必须得声明为singleton,singleton 是默认的作用域。
  • Spring 框架支持以下五个作用域,分别为singleton、prototype、request、session和global session,5种作用域说明如下所示,
作用域描述
singleton在IOC容器仅存在一个Bean实例,默认值
prototype每次从容器调用Bean时,都会产生一个新的bean实例,即每次调用getBean()时,相当于执行newXxxBean()
request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境

这里只演示一个单例模式:
第一步,创建一个 HelloWord.java文件

package com.zq;

public class HelloWord {
  private String message;

  public void setMessage(String message) {
      this.message = message;
  }

  public void getMessage() {
      System.out.println("Your Message :" + message);
  }
}

第二步,创建一个 MainApp.java文件

package com.zq;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
      objA.setMessage("I'm object A");
      objA.getMessage();
      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
      objB.getMessage();
   }
}

第三步,在resources下建立Beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.zq.HelloWorld" scope = "singleton">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

结果:

Your Message : I'm object A
Your Message : I'm object A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值