首页 > 其他分享 >【学习笔记】依赖注入

【学习笔记】依赖注入

时间:2023-02-13 13:22:13浏览次数:39  
标签:依赖 return String void 笔记 address 注入 public name

依赖注入

1.构造器注入

默认是无参构造注入,在bean中,对属性是通过set注入

有参构造注入,有三种方式

都是使用constructor-arg 标签来为有参构造的参数赋值

  • 直接通过属性名

    <bean id="User" class="pojo.User">
        <constructor-arg name="name" value="张三"/>
    </bean>
  • 通过参数的索引

    <bean id="User" class="pojo.User">
       <constructor-arg index="0" value="李四"/>
    </bean>
  • 通过参数的类型

    <bean id="User" class="pojo.User">
       <constructor-arg type="java.lang.String" value="王五"/>
    </bean>

 

2.Set方式注入

依赖注入的本质也就是set注入

  • 依赖:bean对象的创建依赖于容器

  • 注入:bean对象中的属性由容器来注入

 

【测试环境】

  1. 引用对象

    package com.wang.pojo;
    ​
    public class Address {
        private String address;
    ​
        public String getAddress() {
            return address;
        }
    ​
        public void setAddress(String address) {
            this.address = address;
        }
    }
  2. 真实对象(引用对象、数组、list集合、map集合、set集合、properties、null)

    package com.wang.pojo;
    ​
    import java.util.*;
    ​
    public class Student {
        private String name;
        private Address address;
        private String[] books;
        private List<String> hobbys;
        private Map<String,String> card;
        private Set<String> games;
        private Properties info;
        private String pet;
    ​
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
    ​
        public Address getAddress() {
            return address;
        }
    ​
        public void setAddress(Address address) {
            this.address = address;
        }
    ​
        public String[] getBooks() {
            return books;
        }
    ​
        public void setBooks(String[] books) {
            this.books = books;
        }
    ​
        public List<String> getHobbys() {
            return hobbys;
        }
    ​
        public void setHobbys(List<String> hobbys) {
            this.hobbys = hobbys;
        }
    ​
        public Map<String, String> getCard() {
            return card;
        }
    ​
        public void setCard(Map<String, String> card) {
            this.card = card;
        }
    ​
        public Set<String> getGames() {
            return games;
        }
    ​
        public void setGames(Set<String> games) {
            this.games = games;
        }
    ​
        public Properties getInfo() {
            return info;
        }
    ​
        public void setInfo(Properties info) {
            this.info = info;
        }
    ​
        public String getPet() {
            return pet;
        }
    ​
        public void setPet(String pet) {
            this.pet = pet;
        }
    ​
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", address=" + address +
                    ", books=" + Arrays.toString(books) +
                    ", hobbys=" + hobbys +
                    ", card=" + card +
                    ", games=" + games +
                    ", info=" + info +
                    ", pet='" + pet + '\'' +
                    '}';
        }
    }

我们要做的就是将Student中的所有属性都注入值,然后通过toString打印出来

配置文件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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
​
​
    <bean id="student" class="com.wang.pojo.Student">
        <!--普通属性注入值-->
        <property name="name" value="张三"/>
        <!--引用对象属性注入值-->
        <property name="address" ref="address"/>
        <!--数组属性注入值-->
        <property name="books">
            <array>
                <value>三国演义</value>
                <value>水浒传</value>
                <value>西游记</value>
                <value>红楼梦</value>
            </array>
        </property>
        <!--List集合属性注入值-->
        <property name="hobbys">
            <list>
                <value>吃饭</value>
                <value>睡觉</value>
            </list>
        </property>
        <!--Map集合属性注入值-->
        <property name="card">
            <map>
                <entry key="身份证" value="1111110000000111000"/>
                <entry key="学生证" value="2023213213"/>
            </map>
        </property>
        <!--Set集合属性注入值-->
        <property name="games">
            <set>
                <value>原</value>
                <value>和</value>
            </set>
        </property>
        <!--Properties属性注入值-->
        <property name="info">
            <props>
                <prop key="性别">男</prop>
                <prop key="学号">11110000</prop>
                <prop key="籍贯">中国</prop>
            </props>
        </property>
        <!--null属性注入值-->
        <property name="pet">
            <null/>
        </property>
    </bean>
​
    <bean id="address" class="com.wang.pojo.Address">
        <property name="address" value="山东"/>
     </bean>
​
</beans>

 

3.p命名空间和c命名空间注入

所谓p命名空间和c命名空间就是一种扩展注入,通过引入xml依赖,可以更加方便的注入值,其本质还是set注入和构造器注入

p命名空间-----set注入

c命名空间-----构造器注入

使用之前需要导入xml依赖

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

 

举例:

新建一个User类,属性为name和age

package com.wang.pojo;
​
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 +
                '}';
    }
}

注意点:c命名空间必须要有有参构造,p命名空间必须要有无参构造和set方法

 

配置文件:

<!--p命名空间-->
    <bean id="user" class="com.wang.pojo.User" p:name="张三" p:age="18"/>
​
<!--c命名空间-->
    <bean id="user2" class="com.wang.pojo.User" c:name="李四" c:age="20"/>

标签:依赖,return,String,void,笔记,address,注入,public,name
From: https://www.cnblogs.com/wztblogs/p/17116008.html

相关文章

  • 联邦学习论文阅读笔记06 Fair Resource Allocation in Federated Learning
    参考链接:https://www.zhihu.com/people/hidisan/posts        本文提出q-FFL优化算法,在模型准确率不变的情况下,引入q参数化的权重,使损失大的参与者权重更......
  • 0源码基础学习Spring源码系列(一)——Bean注入流程
    作者:京东科技韩国凯通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米!由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正!......
  • XML学习笔记2
    1.3DTD约束1.什么是约束:在xml文档中,咱们可以通过一个文件来约束xml文档中的内容规范。、简单来说:约束就是规定xml文件中可以些什么,不可以些什么。为什么要有约束?因为xm......
  • XML学习笔记1
    第二章:XML、http协议、tomcat1.XML概述1.1什么是XML:英文ExtensibleMarkUpLanguage,可扩展的标记语言**可扩展的标记语言:在XML里面的标记是可以扩展的。**XML版本号1.0......
  • HTML学习笔记1
    1.2单标记和双标记1.单标记:空标记,就是没有结束标记的称之为单标记。语法:水平线标记:​​​<hr/>​​​换行标记:​​<br/>​​​2.双标记:体标,就是这个标记有开始和结......
  • 引入切面注解@Aspect依赖
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><scope>test</scope>......
  • 《告别圆舞曲》——读书笔记
    2023.2.9①对秩序的渴望是一种正当的借口,藉此,人对人的仇恨就堂而皇之地掩盖了人地罪孽2023.2.10①人一老,就喜欢吹嘘自己往日里受过的苦,把它们变成一个博物馆,并邀请人......
  • Spring boot 学习笔记:第十章--实现AcApp端
    开启最后一章的学习java-jarmatchingsystem.jar启动jar包ctrl+shift+r浏览器强制刷新重新打包的流程app.vue删去div.windows标签。style加上scoped属......
  • 联想笔记本充电周期达到300问题解决。
       1.发现联想笔记本电源低于45W就会损耗电池周期;高于45W时电池则直接用充电器电,右下角的叹号也会消失。2.笔记本默认电源就只有45W。如果用了type-c扩展坞,走PD......
  • 读Java实战(第二版)笔记08_默认方法
    1. 兼容性1.1. 二进制级的兼容性1.1.1. 只要不重新编译该类,即使不实现新的方法,现有类的实现依旧可以运行1.1.2. 现有的二进制执行文件能无缝持续链接(包括验证、准......