《Spring攻略(第2版)》——第1章 Spring简介 1.1实例化Spring IoC容器

简介: 应用程序上下文提供比Bean工厂更高级的特性,同时保持基本特性的兼容。所以除非是资源有限的应用程序(例如运行于一个小脚本或者移动设备上),否则我们强烈推荐使用应用程序上下文。

本节书摘来自异步社区《Spring攻略(第2版)》一书中的第1章,第1.1节,作者: 【美】Gary Mak , Josh Long , Daniel Rubio著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 Spring简介

在本章中,你将参加关于Spring、核心容器以及容器所提供的一些全局可用设施的一个速成班(或者一次复习),你还将了解Spring XML配置格式,以及注释驱动的支持。本章将带给你应付本书余下部分中引入的概念所需要的知识。你将学习Spring IoC容器中的基本组件配置。在Spring框架的核心部分,IoC容器的设计具有高度的适应性和可配置性,提供了使你的组件配置尽可能简单的一组工具。你能够很简单地设置运行于Spring IoC容器中的组件。

在Spring中,组件也被称为“bean”。注意,这是与Sun定义的JavaBeans规范不同的概念。Spring IoC容器中声明的bean不一定是JavaBean。它们可以是任何的POJO(简单Java对象)。POJO这个术语的意思是没有任何特殊要求(像实现特殊接口或者扩展特殊的基类)的普通Java对象。这个术语用于将轻量级的Java组件与其他复杂组件模型(例如EJB规范版本3.1以前的EJB组件)中的重量级组件区分开来。

到本章结束时,你将能够使用Spring IoC容器构建一个完整的Java应用程序。而且,如果你回顾旧的Java应用程序,可能会发现自己可以使用Spring IoC容器显著地简化和改进它们。

1.1 实例化Spring IoC容器

1.1.1 问题
你必须实例化Spring IoC容器,读取其配置来创建bean实例。然后,你可以从Spring IoC容器中得到可用的bean实例。

1.1.2 解决方案
Spring提供两种IoC容器实现类型。基本的一种称为Bean工厂(Bean factory)。更高级的一种称为应用程序上下文(Application context),这是对Bean工厂的一种兼容的扩展。

注意,这两种IoC容器类型的Bean配置文件相同。

应用程序上下文提供比Bean工厂更高级的特性,同时保持基本特性的兼容。所以除非是资源有限的应用程序(例如运行于一个小脚本或者移动设备上),否则我们强烈推荐使用应用程序上下文。

Bean工厂和应用程序上下文的接口分别是BeanFactory和ApplicationContext。Application Context接口是用于保持兼容性的BeanFactory子接口。

注:

为了编译和运行本章和后续章节中介绍的Spring代码,你必须在classpath上有Spring框架的依赖(Dependencies)。推荐的方法是使用Apache Maven或者Apache Ant and Ivy这样的构建管理解决方案。如果你打算使用Maven,将下面列出的依赖添加到Maven项目中。和其他地方一样,我们使用${spring.version}标记来引用版本。你可以用对你最合适的版本来替换这一标记。本书使用版本3.0.2.RELEASE编写和编译代码。

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-aop</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-web</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-support</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-beans</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
</dependency>

1.1.3 工作原理
实例化应用程序上下文
ApplicationContext仅仅是一个接口,你必须实例化一个接口的实现。ClassPathXml ApplicationContext实现从classpath中装入一个XML配置文件,构建一个应用程序上下文。你也可以为其指定多个配置文件。

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
除了ClassPathXmlApplicationContext,Spring还提供多种其他的ApplicationContext实现。FileSystemXmlApplicationContext用于从文件系统或者URL装载XML配置文件,而XmlWebApplicationContext和XmlPortletApplicationContext仅能用于Web和入口应用程序。

从IoC容器中得到Bean
为了从bean工厂或者应用程序上下文中得到已声明的bean,你只需要调用getBean()方法并且传递唯一的bean名称。getBean()方法的返回类型为java.lang.Object,在使用之前你必须将其转换为实际的类型。

SequenceGenerator generator =
   (SequenceGenerator) context.getBean("sequenceGenerator");

到了这一步,你就能够像使用任何使用构造程序创建的对象一样,自由地使用bean了。

运行这个序列生成器应用程序的完整源代码在下面的Main类中给出:

package com.apress.springrecipes.sequence;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

   public static void main(String[] args) {
     ApplicationContext context =
        new ClassPathXmlApplicationContext("beans.xml");
     SequenceGenerator generator =
        (SequenceGenerator) context.getBean("sequenceGenerator");
     System.out.println(generator.getSequence());
     System.out.println(generator.getSequence());
   }
}

如果一切正常,你应该看到如下的序列号输出,以及一些你可能不感兴趣的记录信息:

30100000A

30100001A
相关文章
|
5月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
620 2
|
9月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
338 15
|
9月前
|
XML 人工智能 Java
Spring IOC 到底是什么?
IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
234 1
|
10月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
270 18
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
906 26
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
158 1
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
236 0