SpringFramework核心技术一(IOC容器:实例化一个容器)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 实例化一个容器实例化Spring IoC容器很简单。提供给ApplicationContext构造函数的位置路径实际上是资源字符串,它允许容器从各种外部资源(如本地文件系统,Java等)加载配置元数据CLASSPATH。

实例化一个容器

实例化Spring IoC容器很简单。提供给ApplicationContext构造函数的位置路径实际上是资源字符串,它允许容器从各种外部资源(如本地文件系统,Java等)加载配置元数据CLASSPATH。


一、首先来搞一个例子

实例化一个容器:

services.xml是服务层的配置文件,daos.xml是数据访问文件。
按照下面的配置,就让容器将下面的两个XML文件中的bean配置到容器中。

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

1.1

以下示例显示服务层对象(services.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">

    <!-- services -->

    <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
        <! -- 加载daos.xml中的bean ref 引用daos.xml中的id -->
        <property name="accountDao" ref="accountDao"/>
        <property name="itemDao" ref="itemDao"/>
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions for services go here -->

</beans>

1.2

以下示例显示数据访问对象daos.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">

    <bean id="accountDao"
        class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions for data access objects go here -->

</beans>

1.3

在上面1.1和1.2中,服务层由实现类PetStoreServiceImpl、两个数据访问对象JpaAccountDao和JpaItemDao(基于JPA对象/关系映射标准)。
该property name元素引用JavaBean属性的名称,该ref元素引用另一个bean定义的名称。元素id和ref元素之间的这种联系表达了协作对象之间的依赖关系。


二、编写基于XML的配置元数据

2.1

让bean定义跨越多个XML文件可能很有用。通常,每个单独的XML配置文件都代表了架构中的逻辑层或模块。
您可以使用应用程序上下文构造函数从所有这些XML片段中加载bean定义。这个构造函数有多个Resource位置,如前一节所示。或者,使用一个或多个元素来从另一个或多个文件加载bean定义。例如:

<beans>
    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>

    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>

2.2

在前面的例子中,外部定义的Bean是从三个文件加载: services.xml,messageSource.xml,和themeSource.xml。所有位置路径都与导入的定义文件相关,因此services.xml必须位于与导入文件相同的目录或类路径位置, messageSource.xml而且themeSource.xml必须位于resources导入文件位置下方的位置。正如你所看到的,一个前导斜线被忽略,但是鉴于这些路径是相对的,最好不要使用斜线。根据Spring架构,正在导入的文件(包括顶层元素)的内容必须是有效的XML bean定义。

import指令是由bean名称空间本身提供的一项功能。除了普通bean定义以外的其他配置特性可以在Spring提供的XML命名空间中选择,例如“context”和“util”命名空间。

注意:

可能但不推荐使用相对的“../”路径引用父目录中的文件。这样做会创建对当前应用程序外部的文件的依赖关系。特别是,不建议将此引用用于“classpath:”URL(例如“classpath:../ services.xml”),其中运行时解析过程选择“最近”的类路径根,然后查看其父目录。类路径配置更改可能会导致选择不同的,不正确的目录。
您始终可以使用完全限定的资源位置而不是相对路径:例如,“file:C:/config/services.xml”或“c​​lasspath:/config/services.xml”。但是,请注意,您将应用程序的配置与特定绝对位置相关联。通常最好保持这种绝对位置的间接性,例如通过在运行时根据JVM系统属性解析的“$ {…}”占位符。

2.3Groovy Bean定义DSL

作为外部化配置元数据的另一个例子,bean的定义也可以在Spring的Groovy Bean Definition DSL中表示,如Grails框架中所知。通常,这样的配置将存在于“.groovy”文件中,结构如下:

beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}

这种配置风格很大程度上等同于XML bean定义,甚至支持Spring的XML配置名称空间。它还允许通过“importBeans”指令导入XML bean定义文件。

未完待续~~~~

目录
相关文章
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
12天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
17天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
261 11
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
8天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
17 1
|
9天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
11天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
12天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
13天前
|
存储 Kubernetes 调度
基于容器化技术的性能优化实践
基于容器化技术的性能优化实践
25 3
|
5天前
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
30 0
|
12天前
|
数据中心 开发者 Docker
理解并实践Docker容器化技术
理解并实践Docker容器化技术