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>
在上面示例中,id
为hello1
的bean
是传统的bean
定义,而id
为hello2
的bean
是基于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
的一个属性进行定义,对应的值为所关联bean
的id
或name
,如上述示例中的“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所写)
相关推荐
在"SpringSecurity笔记2-SpringSecurity命名空间"这个主题中,我们将深入探讨SpringSecurity配置的核心——命名空间。 SpringSecurity通过XML配置文件中的命名空间来简化设置过程,这些命名空间提供了丰富的元素和...
它提供了一种可靠的分布式数据一致性解决方案,包括命名服务、配置管理、集群同步、分布式锁等。Zookeeper基于分布式一致性协议ZAB,确保数据的一致性和高可用性。 **SpringCloud与Zookeeper整合** SpringCloud为...
Spring Boot 是一个基于 Java 的框架,它简化了创建和配置基于 Spring 的应用程序。在这个主题下,我们将探讨 Spring Boot 如何处理静态资源、Thymeleaf 模板引擎的使用,以及如何自定义视图解析器。 1. **处理静态...
在本章中,我们将深入探讨Spring框架的第四版本(Spring 4)中引入的一个特性——支持参数命名的JdbcTemplate。JdbcTemplate是Spring提供的一种数据库访问工具,它简化了数据库操作,提高了代码的可读性和可维护性。...
Spring框架还提供了丰富的命名空间,如p命名空间和c命名空间,这些命名空间使得XML配置更加简洁。例如,在Spring 2.5版本后,引入了p命名空间,允许直接在XML中通过属性的方式来注入依赖,极大地简化了配置过程。 ...
从Spring Cloud 2020.0.0-M1版本开始,Spring Cloud放弃了之前使用英国伦敦地铁站的命名方式,转而采用了一种新的“日历化”的版本命名方式。这种命名方式基于项目的发布日期,其目的在于提供更直观的版本信息,使...
在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的应用场景需求。 首先,国际化的核心是资源文件,通常命名为`messages.properties`,用于存储默认...
Spring Framework 是Java开发中的核心框架,它以其强大的功能和易用性成为了许多开发者首选的工具。Spring Framework 6.0.8-SNAPSHOT 的中文文档是针对这一最新版本的详尽指南,旨在解决中文互联网上关于Spring框架...
【Spring——DI和通过注解实现IOC和DI】 在软件设计中,依赖注入(Dependency Injection,简称DI)是一种设计模式,用于减少代码间的耦合,提高应用的可测试性和可维护性。DI的核心思想是,组件之间的依赖关系不再...
这种方式体现了Spring的核心特性——反转控制(Inversion of Control,IoC),即由Spring负责创建和管理对象,而不是由代码直接创建。 除了基本的配置和HelloWorld示例,Spring框架还提供了许多其他功能。例如,它...
其他数字命名的文件(如01、02等)可能包含了具体的代码示例、项目配置或者讲解材料,这些内容对于深入理解和实践Struts 2、Spring和Hibernate的整合至关重要。 学习这个教程,开发者不仅可以掌握三大框架的基本...
通过引入相关的命名空间和模式位置,可以在Spring中轻松管理MyBatis的相关配置。 ```xml xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"...
Spring框架还包括其他命名空间,如`aop`(面向切面编程)、`jdbc`(数据库操作)、`tx`(事务管理)等,这些命名空间提供了更多的功能和配置选项,使开发者能够更加精细地控制Spring应用程序的行为。 总的来说,...
在`applicationContext.xml`中,引入Spring Security的XML命名空间,并定义`http`和`authentication-provider`元素。`http`元素用于配置访问控制,如`intercept-url`元素定义了URL模式及其对应的访问权限。例如,`/...
### SSM框架——详细整合教程 #### 一、基本概念 **1.1 Spring** Spring 是一个开源框架,最初由 Rod Johnson 在他的著作《Expert One-On-One J2EE Development and Design》中提出部分理念和原型,随后发展成为...
例如,`xmlns`属性可以定义一个命名空间,`xmlns:prefix="URI"`,其中`prefix`是别名,`URI`是该命名空间的唯一标识。 在处理XML时,我们通常会用到XML解析器,它们分为DOM(Document Object Model)解析器、SAX...
在`spring-framework-RELEASE-schema`中,我们可以找到与上述特性相关的XML命名空间和元素定义。例如,`spring-context.xsd`定义了上下文相关的配置,`spring-amqp.xsd`则涉及RabbitMQ的配置,`spring-websocket.xsd...
然而,Spring还提供了一个名为p命名空间的替代方式,它允许我们在XML配置中使用属性语法来声明和注入Bean的属性。例如,我们可以用`<bean id="exampleBean" class="com.example.ExampleClass" p:property1="value1" ...
首先,我们来理解Spring框架的核心概念——依赖注入(Dependency Injection,简称DI)。Spring通过DI模式,解耦了组件之间的依赖关系,使得组件可以独立地进行单元测试和组装。在Maven构建的Spring工程中,我们会在`...
【标题】:“管理系统系列--【基于shiro的权限管理系统——分布式版】”是一个全面的教程,旨在介绍如何构建一个利用Spring、MyBatis、Redis和Shiro技术的分布式权限管理系统。这个项目旨在提供一个安全、高效且可...