目录

  • 一 Set 注入详解
  • 1 构造实体类student,address
  • 2 配置xml
  • 3 测试
  • 4 分析set几种注入方式的细节
  • 细节1
  • 细节2
  • 细节3
  • 5 引申
  • 6 SUM
  • 二 C命名和P命名空间注入
  • 1 创建实体类User
  • 2 配置xml
  • 3 测试
  • 4 SUM


一 Set 注入详解

在Spring入门理解(一)的文章了解到,spring实现控制反转的手段是set注入,构造函数注入等等
这里将详细的介绍set注入的几种实现形式

DI依赖注入(称为set注入是一回事)的8种方式

  • 普通属性
  • 空值
  • 引用对象
  • 数组
  • List
  • Map
  • Set
  • Properties

1 构造实体类student,address

java set注入属性和方法的区别 spring的set注入_java set注入属性和方法的区别

2 配置xml

java set注入属性和方法的区别 spring的set注入_spring_02

3 测试

java set注入属性和方法的区别 spring的set注入_java set注入属性和方法的区别_03

4 分析set几种注入方式的细节

细节1

java set注入属性和方法的区别 spring的set注入_java_04

细节2

< props > 是简化了的 < map > ,该元素对应配置类型为 java.util.Properties 的对象依赖。

因为Properties 只能指定 String 类型的键和值,所以 < props > 的配置简化很多,只有固定的格式。

细节3

日常使用掌握Map,List即可


5 引申

思考:这8种类型是基本类型,如果我们开发的时候使用的属性是自定义的,不属于这8种怎么办?案例如【spring入门理解(一)】

这时候就需要使用到自定义类型

<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.yusael.service.UserServiceImpl">
    <property name="userDAO">
        <ref bean="userDAO"/>
    </property>
</bean>

此代码也可以进一步简化

<bean id="userDAO" class="com.yusael.dao.UserDAOImpl"></bean>

<bean id="userService" class="com.yusael.service.UserServiceImpl">
    <property name="userDAO" ref="userDAO"/>
</bean>

6 SUM

  1. 实现注入的方式有很多,主要是Set注入

java set注入属性和方法的区别 spring的set注入_spring_05

  1. set注入分为8种基本类型的注入和用户自定义注入

java set注入属性和方法的区别 spring的set注入_User_06


参考文章:

优秀博文1. 优秀博文2.

二 C命名和P命名空间注入

先看看官网怎么要求的,需要导入一些配置

java set注入属性和方法的区别 spring的set注入_spring_07


java set注入属性和方法的区别 spring的set注入_User_08

1 创建实体类User

注意此处没有创建无参和有参构造函数

package com.kuang.pojo;
/*
* @ author:Ove
* @ create:2022/03/23
* */
public class User {
    private String name;
    private int age;

    public User() {
    }

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

    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;
    }

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

2 配置xml

发现c命名出有问题,原来是缺少有参构造函数

java set注入属性和方法的区别 spring的set注入_java_09


在User添加有参构造函数之后,发现 c: 问题解决:说明c背后原理是有参构造函数注入

但是p命名处又报错

java set注入属性和方法的区别 spring的set注入_idea_10


添加了无参构造函数之后,问题解决

java set注入属性和方法的区别 spring的set注入_java_11

3 测试

java set注入属性和方法的区别 spring的set注入_java set注入属性和方法的区别_12

4 SUM

我们发现,cp命名空间十分简单,但是仍然在xml文件里面操作,之后会介绍使用注解方式注入