博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring IOC容器
阅读量:3901 次
发布时间:2019-05-23

本文共 4725 字,大约阅读时间需要 15 分钟。

Spring 容器

是Spring 框架的核心。

容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件Spring Beans。

通过阅读配置元数据提供的指令,容器知道对哪些对象进行实例化,配置和组装。

配置元数据可以通过 XML,Java 注释或 Java 代码来表示。
下图是 Spring 如何工作的高级视图。

  • Spring IoC 容器利用 Java 的 POJO 类配置元数据来生成完全配置和可执行的系统或应用程序。

IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。

在Spring中BeanFactory是IOC容器的实际代表者。

在这里插入图片描述
Spring 提供了以下两种不同类型的容器。

容器 描述
Spring BeanFactory 它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。
Spring ApplicationContext 该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。

ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常建议超过 BeanFactory。BeanFactory 仍然可以用于轻量级的应用程序,如移动设备或基于 applet 的应用程序,其中它的数据量和速度是显著。

Spring BeanFactory 容器

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

BeanFactory 和相关的接口,比如BeanFactoryAware、DisposableBean、InitializingBean,仍旧保留在 Spring 中,主要目的是向后兼容已经存在的和那些 Spring 整合在一起的第三方框架。
在 Spring 中,有大量对 BeanFactory 接口的实现。
其中,最常被使用的是 XmlBeanFactory 类。
这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。
在资源宝贵的移动设备或者基于 applet 的应用当中, BeanFactory 会被优先选择。
否则,一般使用的是 ApplicationContext,除非你有更好的理由选择 BeanFactory。

例:创建一个 Spring 应用程序步骤

步骤 描述
1 创建一个名为 HelloSpring 的工程并在 src 文件夹下新建一个名为 com.briup.spring的包。
2 点击右键,选择 Add External JARs 选项,导入 Spring 的库文件。
3 在 com.briup.spring包下创建 HelloWorld.java 和 MainApp.java 两个类文件。
4 在 src 文件夹下创建 Bean 的配置文件 Beans.xml
5 创建所有 Java 文件和 Bean 的配置文件的内容,运行应用程序。

HelloWorld.java

package com.briup.spring;public class HelloWorld {
private String message; public void setMessage(String message){
this.message = message; } public void getMessage(){
System.out.println("Your Message : " + message); }}

MainApp.java

package com.briup.spring;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;@SuppressWarnings("deprecation")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(); }}
  • 注意
    • 第一步利用框架提供的 XmlBeanFactory() API 去生成工厂 bean 以及利用 ClassPathResource() API 去加载在路径 CLASSPATH 下可用的 bean 配置文件。XmlBeanFactory() API 负责创建并初始化所有的对象,即在配置文件中提到的 bean。
    • 第二步利用第一步生成的 bean 工厂对象的 getBean() 方法得到所需要的 bean。 这个方法通过配置文件中的 bean ID 来返回一个真正的对象,该对象最后可以用于实际的对象。一旦得到这个对象,你就可以利用这个对象来调用任何方法

Bean.xml

Spring ApplicationContext 容器

Application Context 是 BeanFactory 的子接口,也被称为 Spring 上下文。

Application Context 是 spring 中较高级的容器。
和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。 另外,它增加了企业所需要的功能,比如,从属性文件中解析文本信息将事件传递给所指定的监听器。这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。
ApplicationContext 包含 BeanFactory 所有的功能,一般情况下,相对于BeanFactory,ApplicationContext 会更加优秀。当然,BeanFactory 仍可以在轻量级应用中使用,比如移动设备或者基于 applet 的应用程序。

最常被使用的 ApplicationContext 接口实现:

  • FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
  • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
  • WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。

例:创建一个 Spring 应用程序

步骤 描述
1 创建一个名为 HelloSpring 的工程, 在 src 下新建一个名为 com.briup.spring 的包
2 点击右键,选择 Add External JARs 选项,导入 Spring 的库文件。
3 在 com.briup.spring 文件夹下创建 HelloWorld.java 和 MainApp.java 两个类文件。
4 文件夹下创建 Bean 的配置文件 Beans.xml。
5 编辑所有 JAVA 文件的内容和 Bean 的配置文件,运行应用程序。

HelloWorld.java

package com.briup.spring;public class HelloWorld {
private String message; public void setMessage(String message){
this.message = message; } public void getMessage(){
System.out.println("Your Message : " + message); }}

MainApp.java

package com.briup.spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext ("G:/briup-code/work1-workspace/HelloSpring/src/Beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage(); }}
  • 注意
    • 第一步生成工厂对象加载完指定路径下 bean 配置文件后,利用框架提供的 FileSystemXmlApplicationContext API 去生成工厂 bean。FileSystemXmlApplicationContext 负责生成和初始化所有的对象,比如,所有在 XML bean 配置文件中的 bean。
    • 第二步利用第一步生成的上下文中的 getBean() 方法得到所需要的 bean。 这个方法通过配置文件中的 bean ID 来返回一个真正的对象。一旦得到这个对象,就可以利用这个对象来调用任何方法。

Beans.xml

转载地址:http://bxpen.baihongyu.com/

你可能感兴趣的文章
OSINT + Python = 自定义黑客
查看>>
Nginx Load Balancing — Advanced Configuration
查看>>
nginx负载均衡中RR和ip_hash策略分析
查看>>
scribe、chukwa、kafka、flume日志系统对比
查看>>
基于Nginx1.9+LuaJIT+Kafka的点播监控系统实战
查看>>
Openresty+Lua+Memcached反爬虫策略
查看>>
使用OpenResty控制CDN回源主机
查看>>
nginx+lua+kafka实现日志统一收集汇总
查看>>
【图文直播全文记录】酷狗音乐的大数据实践(纯干货)
查看>>
慧眼云:基于云计算和大数据分析的主动防御实践
查看>>
在Linux安装Python之注意事项
查看>>
一次服务器CPU占用率高的定位分析
查看>>
linux cpu占用率分析
查看>>
如何利用socket进行HTTP访问
查看>>
HTTP协议各个版本的介绍和特点
查看>>
在Python中使用JSON
查看>>
初识火焰图
查看>>
使用Systemtap生成Flame Graph(火焰图)
查看>>
pyDash:一个基于 web 的 Linux 性能监测工具
查看>>
python 虚拟环境
查看>>