关于Spring不同类型的注入方式 p-namespace,c-namespace

目录
  • Spring不同类型的注入方式
    • 1、不同类型的注入方式
    • 2、p-namespace以及c-namespace
  • Spring p-namespace和c-namespace用法
    • 1、p-namespace
    • 2、c-namespace

Spring不同类型的注入方式

spring官网代码示例

1、不同类型的注入方式

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="address" class="com.hu.pojo.Address">
        <property name="address" value="lalala"/>
    </bean>
    <bean id="student" class="com.hu.pojo.Student">
        <!--注入value-->
        <property name="name" value="pengpeng"/>
        <!--第二种bean注入,ref-->
        <property name="address" ref="address"/>
        <!--String[]数组注入-->
        <property name="book">
            <array>
                <value>红楼梦</value>
                <value>水浒传</value>
            </array>
        </property>
        <!--list注入-->
        <property name="hobbys">
            <list>
                <value>听歌</value>
                <value>make</value>
            </list>
        </property>
        <!--map注入-->
        <property name="card">
            <map>
                <entry key="gender" value="male"/>
            </map>
        </property>
        <!--set注入-->
        <property name="games">
            <set>
                <value>lol</value>
            </set>
        </property>
        <!--空值-->
        <property name="wife" value=""/>
        <!--properties注入-->
        <property name="info">
            <props>
                <prop key="学号">15200000</prop>
                <prop key="专业">CS</prop>
            </props>
        </property>
    </bean>
</beans>

2、p-namespace以及c-namespace

2.1 添加方法

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="user" class="com.hu.pojo.User" p:name="鹏鹏"/>
</beans>

2.2 p和c区别

  • p-namespace:通过值进行注入,简洁方便
  • c-namespace:通过构造器进行注入,需要在java类文件中加上有参构造器和无参构造器

Spring p-namespace和c-namespace用法

为什么要讲Spring的 p-namespace,c-namespace

  • 对于简单项目或代码,可以起到简化的作用
  • 加强对Spring新知识的学习
  • 学习就是了,哪来那么多为什么!

1、p-namespace

①又叫p-命名空间,

②它是什么意思呢?

首先这样子讲吧,以前我们写bean的时候为某个对象的属性注入值有两种方式,一种是有参构造(constructor-arg),一种是通过(property标签为指定属性注入值)

③而p正是property的首字母,所以它是干嘛的大家应该可以猜得到了

④纯粹上是为了简化吧(个人认为)

⑤我们直接上例子来学习吧

首先在使用p命名空间之前你需要在相应的xml文件内写入一些支持配置信息

xmlns:p="http://www.springframework.org/schema/p"

项目结构搭建好,还是上节笔记搭建的(传送门在博文(个_个))

package com.ysj.study;
@SuppressWarnings("ALL")
public class HelloDemo1 {
    private String name;
    private int age;
    public HelloDemo1(){
        System.out.println("HelloDemo1的 无 参构造");
    }
    public HelloDemo1(String name) {
        System.out.println("HelloDemo1的 有 参构造");
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

测试类写好

输出看看结果

这需要注意一下p标签后面的是属性的名字,不是setter参数的名字!!!!

2、c-namespace

①又叫c-命名空间

②它是什么意思呢?

就是用来通过有参构造为对象注入初始属性值

③而c正是constructor-arg的首字母,所以它是干嘛的大家应该也可以猜得到了

④纯粹上是为了简化吧(个人认为)

⑤我们直接上例子来学习吧

首先在使用c命名空间之前你需要在相应的xml文件内写入一些支持配置信息

xmlns:c="http://www.springframework.org/schema/c"

我们对上面HelloDemo类的有参构造进行一些修改

修改为如下的beans.xml代码

输出结果看看

我们把setter方法都去掉,发现还是可以运行的,所以c-命名空间的用法和constructor-agr是一模一样的

只需要注意下面的图例就可以

c-namespace的拓展:

其实c-namespace除了通过参数名字来注入值以外,还可以通过参数索引来注入依赖值。如下

输出结果还是可以的

关于p-namespacec-namespace的用法就这么多,慢慢吸收O(∩_∩)O哈哈~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring中属性注入的几种方式以及复杂属性的注入详解

    在spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.Properties等,我们也都有相应的注入方式. OK,接下来我们就来看看这么多不同的注入吧! 三种属性注入方式 构造方法注入 构造方法注入和p名称空间注入这两种方式我们在开发中用的并不算多,但是我们还是有必要先来看看构造方法如何注入. 假设我有一个User4,如下: public class Us

  • 详解Spring 两种注入的方式(Set和构造)实例

    依赖注入是指对象之间关系的控制权由应用代码中转到外部容器.Spring框架主要提供了Set注入和构造注入两种依赖注入方式. 1:Set注入指的就是在接受注入的类中定义一个要被注入的类型的一个set方法,并在参数中定义需要注入的元素.Set注入式一种装配Bean属性的直接方法,但Set注入的一个缺点就是它假设了所有的可变属性都可以通过set方法访问到,无法清晰地表示哪些属性是必须的,哪些属性是可选的. 2:构造注入是在接收注入的类中定义一个构造方法,并在构造方法中定义需要注入的参数.构造注入方式的

  • spring四种依赖注入方式的详细介绍

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种

  • 详解Spring中bean的几种注入方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入.依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Spring容器中支持的依赖注入方式主要有属性注入.构造函数注入.工厂方法注入.接下来将为大家详细介绍这三种依赖注入的方式以及它们的具体配置方法. 1.属性注入 属性注入即通过setXXX( )方法注入bean的属性值或依赖对象.由于属性注入方式具有可选择性和灵活性高的特点,因此它也是实际开发中最常用的注入方式

  • 关于Spring不同类型的注入方式 p-namespace,c-namespace

    目录 Spring不同类型的注入方式 1.不同类型的注入方式 2.p-namespace以及c-namespace Spring p-namespace和c-namespace用法 1.p-namespace 2.c-namespace Spring不同类型的注入方式 spring官网代码示例 1.不同类型的注入方式 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w

  • Spring Bean的属性注入方式

    在spring中bean的属性注入有两种 构造器注入 <bean id="car" class="nwtxxb.di.Car"> <constructor-arg index="0" type="java.lang.String" value="保时捷"></constructor-arg> <constructor-arg index="1"

  • Spring Bean常用依赖注入方式详解

    一般而言,Spring的依赖注入有三种:构造器注入.setter注入以及接口注入.本文主要讲构造器注入与setter注入. 1.构造器注入 为了让Spring完成构造器注入,我们需要去描述具体的类.构造方法并设置构造方法的对应参数. 代码如下: public class Role { private Long id; private String roleName; private String note; public Long getId() { return id; } public vo

  • Java spring的三种注入方式详解流程

    目录 设置Spring的作用域 自动注入 @Primary Qualifier @ComponentScan不同的配置对性能的影响 懒加载 三种注入方式 字段注入(IDEA 会提示不推荐) 字段注入的bean类外部不可见 循环依赖问题 构造器注入(官方推荐) set方法注入 设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefin

  • Spring Bean三种注入方式详解

    在Spring容器中为一个bean配置依赖注入有三种方式: 使用属性的setter方法注入  这是最常用的方式: 使用构造器注入: 使用Filed注入(用于注解方式). Field注入是最常见的一种方式,可以采用 @Autowired 对Bean类的接口进行初始化,代码如下 @ContextConfiguration({"/META-INF/spring/amazing-base.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public

  • Spring bean 四种注入方式详解

    目录 一.Set方式注入 pojo层: 1.xml 文件 test测试 二.构造函数方式注入 pojo层 2.xml文件 test测试 三.注解注入 pojo层 3.xml文件 test测试 四.JavaConfig 方式注入 pojo层 JavaConfig 类 xml文件 扫描包 测试: 五.Service层注入详解 service serviceImpl xml配置文件 总结 一.Set方式注入 pojo层: /** * @Author: crush * @Date: 2021-06-17

  • 浅谈spring ioc的注入方式及注入不同的数据类型

    关于Spring-IoC的简单使用参考: spring ioc的简单实例及bean的作用域属性解析 1.通过set方法注入不同数据类型 测试类代码(set方式注入的属性一定要加set方法) /**通过set方法注入示例*/ public class IoC_By_Set { /**注入Integer类型参数*/ private Integer id; /**注入String类型参数*/ private String name; /**注入实体Bean*/ private User user; /

  • Spring为IOC容器注入Bean的五种方式详解

    这篇文章主要介绍了Spring为IOC容器注入Bean的五种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一 @Import导入组件,id默认是组件的全类名 //类中组件统一设置.满足当前条件,这个类中配置的所有bean注册才能生效: @Conditional({WindowsCondition.class}) @Configuration @Import({Color.class,Red.class,MyImportSelector

随机推荐