`

Spring(04)——p命名空间和c命名空间

阅读更多

4p命名空间和c命名空间

在通过构造方法或set方法给bean注入关联项时通常是通过constructor-arg元素和property元素来定义的。在有了p命名空间和c命名空间时我们可以简单的把它们当做bean的一个属性来进行定义。

4.1p命名空间

使用p命名空间时需要先声明使用对应的命名空间,即在beans元素上加入xmlns:p="http://www.springframework.org/schema/p"。下面先来看一个示例。

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

	<bean id="world" class="com.app.World"/>
	
	<!-- 通过set方法注入的传统的bean定义 -->
	<bean id="hello1" class="com.app.Hello">
		<property name="p1" value="v1"/>
		<property name="p2" value="v2"/>
		<property name="world" ref="world"/>
	</bean>
	
	<!-- 通过set方法注入的使用p命名空间的bean定义 -->
	<bean id="hello2" class="com.app.Hello" p:p1="v1" p:p2="v2" p:world-ref="world"/>

</beans>

在上面示例中,idhello1bean是传统的bean定义,而idhello2bean是基于p命名空间的bean定义。当传统的property元素定义的value是基础数据类型时,我们可以直接把property元素对应的name加上p命名空间的前缀作为bean的一个属性进行定义,对应的值就是原property元素对应的value。如上述示例中name“p1”property使用p命名空间后就变成了“p:p1”;当传统的property元素定义的是对其它bean的关联时,我们可以直接把property元素对应的name加上“-ref”,再加上p命名空间的前缀作为bean的一个属性进行定义,对应的值为原property元素对应的ref值,如上述示例中name“world”property就是定义了对其它bean的关联,使用p命名空间后就变成了“p:world-ref”。这里有一点需要注意的地方就是property对应的是set方法,而不是对应的属性,如name“world”property实际上对应的是setWorld()方法,这个时候不管对应的bean是否真存在名为world的属性;另一点需要注意的地方是使用p命名空间时要注意以“-ref”结尾的property,这会导致Spring以其前部分作为property,因为“-ref”会被Spring作为关联的关键字。

4.2c命名空间

c命名空间的用法和p命名空间类似,其对应于constructor-arg,即可以将constructor-arg元素替换为bean的一个以c命名空间前缀开始的属性。使用c命名空间之前也需要通过xmlns:c=”http://www.springframework.org/schema/c”进行声明。

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

	<bean id="world" class="com.app.World"/>
	
	<!-- 传统的使用constructor-arg通过构造方法注入的bean定义 -->
	<bean id="hello1" class="com.app.Hello">
		<constructor-arg index="0" value="arg1"/>
		<constructor-arg index="1" value="2"/><!-- arg2 -->
		<constructor-arg index="2" ref="world"/><!-- arg3 -->
	</bean>
	<!-- 使用c命名空间通过构造方法注入的bean定义 -->
	<bean id="hello2" class="com.app.Hello" c:arg1="c_arg1" c:arg2="2" c:arg3-ref="world"/>
</beans>

如上所示,c命名空间的用法和p命名空间的用法类似。对于通过构造方法注入原始类型的对象可以把对应的构造参数名称加上c命名空间的前缀作为bean的一个属性进行定义,对应的值即是构造参数的值;如果通过构造参数注入的是其它bean的一个引用,则可将该构造参数名称加上“-ref”,再加上c命名空间的前缀作为该bean的一个属性进行定义,对应的值为所关联beanidname,如上述示例中的“c:arg3-ref”

需要注意的是直接把构造参数名称加上c命名空间的前缀作为bean的一个属性定义来替代对应的constructor-arg只对以debug方式编译的class有效,因为对于非debug方式编译的class文件Spring将无法获取到对应构造方法的参数名。对于这种情况我们可以直接使用构造方法参数的索引加上下划线“_”前缀来代替对应的参数名,索引是从0开始的,如上面的示例以索引来代替时将是如下这个样子。

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

	<bean id="world" class="com.app.World"/>
	
	<!-- 传统的使用constructor-arg通过构造方法注入的bean定义 -->
	<bean id="hello1" class="com.app.Hello">
		<constructor-arg index="0" value="arg1"/>
		<constructor-arg index="1" value="2"/><!-- arg2 -->
		<constructor-arg index="2" ref="world"/><!-- arg3 -->
	</bean>
	<!-- 使用c命名空间并且是使用构造参数的索引作为属性来通过构造方法注入的bean定义 -->
	<bean id="hello2" class="com.app.Hello" c:_0="c_arg1" c:_1="2" c:_2-ref="world"/>
</beans>

(注:本文是基于Spring4.1.0所写)

 

本文转自:https://elim.iteye.com/blog/2383341

分享到:
评论

相关推荐

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"这个主题中,我们将深入探讨SpringSecurity配置的核心——命名空间。 SpringSecurity通过XML配置文件中的命名空间来简化设置过程,这些命名空间提供了丰富的元素和...

    SpringCloud——Zookeeper(注册中心)

    它提供了一种可靠的分布式数据一致性解决方案,包括命名服务、配置管理、集群同步、分布式锁等。Zookeeper基于分布式一致性协议ZAB,确保数据的一致性和高可用性。 **SpringCloud与Zookeeper整合** SpringCloud为...

    spring-boot——web笔记

    Spring Boot 是一个基于 Java 的框架,它简化了创建和配置基于 Spring 的应用程序。在这个主题下,我们将探讨 Spring Boot 如何处理静态资源、Thymeleaf 模板引擎的使用,以及如何自定义视图解析器。 1. **处理静态...

    第十二章 Spring4 支持参数命名的JdbcTemplate

    在本章中,我们将深入探讨Spring框架的第四版本(Spring 4)中引入的一个特性——支持参数命名的JdbcTemplate。JdbcTemplate是Spring提供的一种数据库访问工具,它简化了数据库操作,提高了代码的可读性和可维护性。...

    Spring框架原理及详细搭建步骤

    Spring框架还提供了丰富的命名空间,如p命名空间和c命名空间,这些命名空间使得XML配置更加简洁。例如,在Spring 2.5版本后,引入了p命名空间,允许直接在XML中通过属性的方式来注入依赖,极大地简化了配置过程。 ...

    微服务 Spring Cloud 2020 重大变革(csdn)————程序.pdf

    从Spring Cloud 2020.0.0-M1版本开始,Spring Cloud放弃了之前使用英国伦敦地铁站的命名方式,转而采用了一种新的“日历化”的版本命名方式。这种命名方式基于项目的发布日期,其目的在于提供更直观的版本信息,使...

    spring mvc 3 国际化(下)——简单自定义操作

    在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的应用场景需求。 首先,国际化的核心是资源文件,通常命名为`messages.properties`,用于存储默认...

    Spring Framework 6 中文文档

    Spring Framework 是Java开发中的核心框架,它以其强大的功能和易用性成为了许多开发者首选的工具。Spring Framework 6.0.8-SNAPSHOT 的中文文档是针对这一最新版本的详尽指南,旨在解决中文互联网上关于Spring框架...

    Spring——DI和通过注解实现IOC和DI

    【Spring——DI和通过注解实现IOC和DI】 在软件设计中,依赖注入(Dependency Injection,简称DI)是一种设计模式,用于减少代码间的耦合,提高应用的可测试性和可维护性。DI的核心思想是,组件之间的依赖关系不再...

    spring详解教程

    这种方式体现了Spring的核心特性——反转控制(Inversion of Control,IoC),即由Spring负责创建和管理对象,而不是由代码直接创建。 除了基本的配置和HelloWorld示例,Spring框架还提供了许多其他功能。例如,它...

    轻量级Java EE企业应用开发实战—光盘——Struts 2+Spring+Hibernate整合开发

    其他数字命名的文件(如01、02等)可能包含了具体的代码示例、项目配置或者讲解材料,这些内容对于深入理解和实践Struts 2、Spring和Hibernate的整合至关重要。 学习这个教程,开发者不仅可以掌握三大框架的基本...

    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    通过引入相关的命名空间和模式位置,可以在Spring中轻松管理MyBatis的相关配置。 ```xml xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"...

    spring配置[收集].pdf

    Spring框架还包括其他命名空间,如`aop`(面向切面编程)、`jdbc`(数据库操作)、`tx`(事务管理)等,这些命名空间提供了更多的功能和配置选项,使开发者能够更加精细地控制Spring应用程序的行为。 总的来说,...

    Spring_Security权限管理_学习笔记

    在`applicationContext.xml`中,引入Spring Security的XML命名空间,并定义`http`和`authentication-provider`元素。`http`元素用于配置访问控制,如`intercept-url`元素定义了URL模式及其对应的访问权限。例如,`/...

    SSM框架——详细整合教程(Spring SpringMVC MyBatis

    ### SSM框架——详细整合教程 #### 一、基本概念 **1.1 Spring** Spring 是一个开源框架,最初由 Rod Johnson 在他的著作《Expert One-On-One J2EE Development and Design》中提出部分理念和原型,随后发展成为...

    xml——————表单资源

    例如,`xmlns`属性可以定义一个命名空间,`xmlns:prefix="URI"`,其中`prefix`是别名,`URI`是该命名空间的唯一标识。 在处理XML时,我们通常会用到XML解析器,它们分为DOM(Document Object Model)解析器、SAX...

    Spring框架约束文件 spring-framework-4.3.RELEASE-shcema

    在`spring-framework-RELEASE-schema`中,我们可以找到与上述特性相关的XML命名空间和元素定义。例如,`spring-context.xsd`定义了上下文相关的配置,`spring-amqp.xsd`则涉及RabbitMQ的配置,`spring-websocket.xsd...

    spring资料4

    然而,Spring还提供了一个名为p命名空间的替代方式,它允许我们在XML配置中使用属性语法来声明和注入Bean的属性。例如,我们可以用`&lt;bean id="exampleBean" class="com.example.ExampleClass" p:property1="value1" ...

    Spring in Action 使用Maven 构建Spring 工程

    首先,我们来理解Spring框架的核心概念——依赖注入(Dependency Injection,简称DI)。Spring通过DI模式,解耦了组件之间的依赖关系,使得组件可以独立地进行单元测试和组装。在Maven构建的Spring工程中,我们会在`...

    管理系统系列--【基于shiro的权限管理系统——分布式版】一个用spring、mybatis、redis和shir.zip

    【标题】:“管理系统系列--【基于shiro的权限管理系统——分布式版】”是一个全面的教程,旨在介绍如何构建一个利用Spring、MyBatis、Redis和Shiro技术的分布式权限管理系统。这个项目旨在提供一个安全、高效且可...

Global site tag (gtag.js) - Google Analytics