Spring namespace(命名空间)

文章介绍了XML配置文件中命名空间的概念,如beans,xmlns,xsi:schemaLocation,以及它们在避免标签冲突中的作用。在Spring框架中,p命名空间用于属性注入,c命名空间则用于构造器注入。文中还展示了如何在配置文件中使用这两个命名空间,并提供了示例代码。同时,提到了Spring中的bean作用域,如singleton和prototype等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命名空间一般放置在 XML 文件的开始标签中,如下最基本的 Spring XML 配置文件中,xmlns / xmlns:xsi / xsi:schemaLocation 三项便是命名空间。

<?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-4.0.xsd">

</beans>

作用:命名空间的作用是自动为 XML 标签补全前缀,避免标签命名冲突

  • p命名空间是set注入的一种实现方式
  • c命名空间是构造器注入的一种方式

注入条件:

  • 在spring的配置文件的顶部加上一句xmlns:c=“http://www.springframework.org/schema/c”(如果是p的就把c该p)
  • 提供构造方法(这用无参构造方法)

案例

p命名与c命名

pojo【注意:这里没有有参构造器!】

package com.hyq.pojo;

public class User {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

注意看有没有加入上面所说的条件已及加入的具体位置

<?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"
       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">
    <!--p c 命名空间-->

    <!--P(属性: properties)命名空间 , 属性依然要设置set方法-->
<!--    <bean id="user" class="com.hyq.pojo.User" p:name="胡奕奇" p:age="18"/>-->


    <!--C(构造: Constructor)命名空间 , 属性依然要设置set方法-->
    <bean id="user" class="com.hyq.pojo.User" scope="prototype" c:name="胡奕奇" c:age="18"/>


</beans>

这里演示一个c命名空间的注入:
在这里插入图片描述

Bean

在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象 。

Spring IoC 容器中具有以下几种作用域:

  • 基本作用域singleton(单例)
  • prototype(多例),
  • Web 作用域(reqeust、session、globalsession)
  • 自定义作用域
    在这里插入图片描述

当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例;

当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例;

当一个bean的作用域为Request,表示在一次HTTP请求中,一个bean定义对应一个实例;

当一个bean的作用域为Session,表示在一个HTTP Session中,一个bean定义对应一个实例;

### Spring框架中C命名空间的使用方法 在Spring框架中,`c:` 命名空间提供了一种简洁的方式来设置构造函数参数和工厂方法参数。这种方式允许通过XML配置文件中的属性来传递构造函数参数,从而简化了Bean的实例化过程。 #### c:命名空间的基本语法 为了使用 `c:` 命名空间,在XML头部声明时需引入相应的schema定义: ```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" 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"> </beans> ``` 此命名空间主要用于替代传统的 `<constructor-arg>` 标签,使代码更加紧凑易读[^1]。 #### 实际案例展示 假设有一个简单的Java类 `Person`,该类具有两个私有字段:名字 (`name`) 和年龄 (`age`),并且仅提供了一个带有这两个参数的构造函数。 ```java public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } ``` 接下来是在Spring XML配置文件中如何利用 `c:` 命名空间为上述 `Person` 类创建Bean实例的例子: ```xml <!-- 使用c:namespace注入构造函数参数 --> <bean id="personWithCNamespace" class="com.example.Person" c:name="John Doe" c:age="30"/> ``` 这里不再需要显式的 `<constructor-arg>` 元素,而是直接采用 `c:` 加上对应的参数名称作为属性的方式来进行赋值操作[^4]。 当存在多个同类型的构造参数时,则可以通过索引来区分它们的位置。例如对于一个接受两个字符串参数的构造器来说,可以这样写: ```xml <bean id="exampleBean" class="ExampleClass" c:_0="firstArgument" c:_1="secondArgument"/> ``` 这里的 `_0`, `_1` 表示按照位置顺序依次对应第一个、第二个构造参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aholic 冲冲冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值