Spring IoC容器和bean介绍
IoC 也称为依赖注入(DI)。这是一个过程,其中对象定义它们的依赖关系,即它们使用的其他对象,仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后在对象实例上设置的属性. 然后容器在创建 bean 时注入这些依赖项。这个过程基本上是相反的,因此称为控制反转(IoC),bean 本身通过使用类的直接构造来控制其依赖项的实例化或位置,或诸如服务定位器模式。
在org.springframework.beans和 org.springframework.context包是Spring框架的IoC容器的基础。该BeanFactory接口提供了一种能够管理任何类型对象的高级配置机制。 ApplicationContext是它的一个子接口, BeanFactory.它增加了与 Spring 的 AOP 特性的更容易集成;消息资源处理(用于国际化),事件发布;和应用层特定的上下文,例如WebApplicationContext 用于 Web 应用程序。
简而言之,它BeanFactory提供了配置框架和基本功能,并 ApplicationContext添加了更多企业特定的功能。该 ApplicationContext是对一个完整的超集BeanFactory,并在Spring的IoC容器的描述本章独占使用。有关使用BeanFactory代替 的更多信息,ApplicationContext,请参阅第 5.15 节,“BeanFactory”。
在 Spring 中,构成应用程序主干并由 Spring IoC容器管理的对象称为beans。bean 是由 Spring IoC 容器实例化、组装和管理的对象。否则,bean 只是应用程序中众多对象之一。Bean 以及它们之间的依赖关系反映在容器使用的配置元数据中。
容器概述
该接口 org.springframework.context.ApplicationContext 代表 Spring IoC 容器,负责实例化、配置和组装上述 bean。容器通过读取配置元数据来获取有关要实例化、配置和组装哪些对象的指令。配置元数据以 XML、Java 注释或 Java 代码表示。它允许您表达组成应用程序的对象以及这些对象之间丰富的相互依赖关系。
ApplicationContextSpring 提供了该接口的多种实现 。在独立应用程序中,通常创建ClassPathXmlApplicationContext或的实例FileSystemXmlApplicationContext。虽然 XML 一直是定义配置元数据的传统格式,但您可以通过提供少量 XML 配置来声明性地启用对这些附加元数据格式的支持,从而指示容器使用 Java 注释或代码作为元数据格式。
在大多数应用场景中,不需要显式的用户代码来实例化一个或多个 Spring IoC 容器实例。例如,在 Web 应用程序场景中,应用程序文件中的简单八行(左右)样板 J2EE Web 描述符 XMLweb.xml通常就足够了(请参阅第 5.14.4 节,“ ApplicationContext Web 应用程序的便捷实例化”)。如果您使用的是SpringSource Tool Suite Eclipse 驱动的开发环境或Spring Roo,则只需点击几下鼠标或击键,即可轻松创建此样板配置。
下图是 Spring 如何工作的高级视图。您的应用程序类与配置元数据相结合,因此在ApplicationContext创建和初始化之后,您就有了一个完全配置且可执行的系统或应用程序。
一、新建maven项目
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
二、新建pojo
package com.zsm.pojo;
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
三、基于 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.xsd" >
<!-- 使用spring来创建对象,在spring这些都称为bean-->
<bean id="hello" class="com.zsm.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
</beans>
该id属性是一个字符串,用于标识单个 bean 定义。
该class 属性定义 bean 的类型并使用完全限定的类名。
id 属性的值是指协作对象。
四、实例化容器
在Test/java路径下新建测试类MyTest.java
import com.zsm.pojo.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
//获取spring的上下文对象!
ApplicationContext context =new ClassPathXmlApplicationContext("ApplicationContext.xml");
//我们的对象现在都在spring中的管理了,我们要使用,直接去里面取出来就可以!
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
}