DI依赖注入-P8,P9,P10,P11

news2024/11/24 6:35:38

1.构造器注入

之前写过了~~~~

2.Set方式注入【重点】

3.拓展方式注入


2.Set方式注入【重点】 

【环境搭建】

1.复杂类型

2.真实测试对象

四个文件


Student实体类的创建:

 主要是依据官方文档来建立。那个Address也是为了测试不同的类型,而创建的引入类。主体是这个Student!!!

package com.Li.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 wife;

    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 getWife() {
        return wife;
    }

    public void setWife(String wife) {
        this.wife = wife;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", address=" + address +
                ", books=" + Arrays.toString(books) +
                ", hobbys=" + hobbys +
                ", card=" + card +
                ", games=" + games +
                ", info=" + info +
                ", wife='" + wife + '\'' +
                '}';
    }
}

Address实体类的创建:

package com.Li.pojo;

public class Address {
    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

beans.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.Li.pojo.Student">
      <property name="name" value="李"/>
  </bean>


</beans>

MyTest

import com.Li.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Student student = (Student) context.getBean("student");
        System.out.println(student.getName());

    }
}

这些配置都没什么好说的,之前都配置过,学过。
测试

 输出配置注入的名字


八种注入方式:

<?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.Li.pojo.Address"/>

    <!--最基础的创建对象,设置name的值为李-->
    <bean id="student" class="com.Li.pojo.Student">

        <!--第一种,普通注入,value-->
        <property name="name" value="李"/>

        <!--第二种,bean注入,使用ref。-->
        <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>
                <value>打球</value>
            </list>
        </property>

        <!--第五种,Map注入(特殊)-->
        <property name="card">
            <map>
                <entry key="身份证" value="0000000"/>
                <entry key="银行卡" value="1111111"/>
            </map>
        </property>

        <!--第六种,Set注入-->
        <property name="games">
            <set>
                <value>LOL</value>
                <value>COC</value>
                <value>BOB</value>
            </set>
        </property>

        <!--第七种,null注入-->
        <property name="wife">
            <null></null>
        </property>

        <!--第八种,Properties注入(特殊)-->
        <property name="info">
            <props>
                <prop key="driver">20220000</prop>
                <prop key="url">xxx</prop>
                <prop key="password">1111</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>



</beans>

测试一下。

发现address有问题,所以给Address类里面增加一个toString方法

测试修改之后:

 成功!(因为再bean里面没有设置adress的值,所以为null)


拓展方式注入(了解即可)

User实体类:

package com.Li.pojo;

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

    public User() {
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", 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;
    }
}

userBeans.xml:

导入xml约束:

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

测试p与c (p对应无参构造,c对应有参构造

 

 测试:

   @Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("userBeans.xml");

        User user = context.getBean("user",User.class);//和强转本质一样,只不过换了一种形式
        System.out.println(user);

        User user2 = context.getBean("user2",User.class);
        System.out.println(user2);
    }


Bean的作用域

 六种作用域:

 默认单例:singleton(每一次创建的都是一个相同的bean对象)


prototype:(原型模式,每一次都是不同的bean对象)

 

 测试之后不相等了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界misc2-1

misc2-1 题目描述&#xff1a;无 题目环境&#xff1a;https://download.csdn.net/download/m0_59188912/87094620 打开图片&#xff0c;发现无法显示。 使用winhex打开&#xff0c;从其中一段看出这是逆序图片。 使用python脚本将其正序排列。 脚本源码&#xff1a; f1open(‘…

5G无线技术基础自学系列 | SA及NSA组网架构

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 3GPP为新空中接口定义了两种部署配置&a…

操作系统笔记

文章目录一、操作系统的定义1.1 操作系统的功能和目标1.2 操作系统的特征1.3 操作系统的发展和分类1.4 操作系统的运行机制1.5 操作系统内核1.6 操作系统的体系结构二、中断机制中断和异常三、系统调用3.1 系统调用的分类&#xff08;按功能分配&#xff09;3.2 系统调用和库函…

整夜我的背影是一条踏往星空的道路

Brigit Pegeen Kelly&#xff0c;1951 - 2016.08.14&#xff0c;美国诗人、教师&#xff0c;在加利福尼亚州帕洛阿尔托出生&#xff0c;在印第安纳南部长达&#xff0c;成年后的大部分时间都在伊利诺州中部度过。一位非常注重隐私的女性&#xff0c;她的生活很少为人所知。[1][…

计算机基础学习(好文必看)

好长时间没发文章了&#xff0c;主要是以输入为主。 那么&#xff0c;给小伙伴们推荐一些计算机基础学习的知识&#xff0c;自己感觉挺不错的。 计算机基础学习&#xff1a; 1. 小林师傅是一位宝藏博主&#xff0c;非常厉害&#xff0c;各大平台都有他的文章&#xff0c;我是…

Day08--自定义组件的样式

提纲挈领&#xff1a; ************************************************************************************************************ 我的操作&#xff1a; 1》在app.wxss里面定义一个全局样式&#xff1a; 2》在home.wxml里面使用全局样式。 3》在test2.wxml里面使用…

Prometheus系列(一)安装

1 安装 Prometheus Server 官网&#xff1a;https://prometheus.io/ 下载&#xff1a;https://prometheus.io/download/ 手册&#xff1a;https://prometheus.io/docs/introduction/overview/ Prometheus 基于 Golang 编写&#xff0c;编译后的软件包&#xff0c;不依赖于任何的…

如何画业务流程图?

业务流程图是用来描述客户业务作业方式的有效手段&#xff0c;它可以清晰地客户业务流程中涉及的人员角色、业务活动、业务数据以及他们之间的关系&#xff0c;是用来澄清需求的有效手段。一个典型的业务流程图如下图所示&#xff1a; 在画业务流程图时有哪些注意事项呢&#x…

分布式协调服务

服务越来越对&#xff0c;人工管理和维护服务及地址的配置地址信息会越来越困难&#xff0c;单点故障的问题也凸显出来。一旦服务路由或者负载均衡服务器宕机&#xff0c;依赖他的所有服务均将失效。 什么是 zookeeper&#xff1f; zookeeper 是一个开源的分布式协调服务。zoo…

【乱码】记一次C#调用Java乱码

项目是使用 C# 写的&#xff0c;传输数据使用对方给的Java加密解密算法。直接使用C#写算法要研究对方的算法&#xff0c;耗时较长。 因此直接将jar包转成dll进行调用。 前言 使用IKVM工具将Java生成的Jar包转成dll&#xff0c;使用C#进行调用&#xff0c;可以正常调用&#xff…

Java-10接口与抽象类

Java-10接口与抽象类 抽象方法 abstract method机制 这是一个不完整的方法&#xff0c;它只有一个声明&#xff0c;没有方法体 abstract void f();包含抽象方法的类被称为抽象类&#xff1a;如果一个类包含一个或多个抽象方法&#xff0c;则该类必须被定义为抽象类 public…

CEAC 之《企业信息化管理》3

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;微微的猪食小窝 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1综合布线属于系统集成的____________。 A、网络应用系统 B、应用基础平台 C、网络平台 D、…

JavaEE 几种spring注解

使用注解可以更简单的存储Bean对象和读取Bean对象。 存储Bean对象 在使用注解之前&#xff0c;需要做一些前置工作&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"…

01- mysql基础

MySQL基础 今日目标&#xff1a; 完成MySQL的安装及登陆基本操作能通过SQL对数据库进行CRUD能通过SQL对表进行CRUD能通过SQL对数据进行CRUD 1&#xff0c;数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会…

Dendro Azide-PEG-Dendro Azide,Dendro N3-PEG-Dendro N3,PEG超支化树状叠氮

1、名称 英文&#xff1a;Dendro Azide-PEG-Dendro Azide&#xff0c;Dendro N3-PEG-Dendro N3 中文&#xff1a;聚乙二醇-超支化树状叠氮 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Azide PEG 4、分子量&#xff1a;可定制&#xff0c;Dendro Azide-PEG 20K-Den…

【暴力更换OPPO启动器为其它三方(Nova Launcher in my Case Scenario)】

狠搞更换OPPO启动器为三方&#xff08;Nova&#xff09; 我咋就不知道狮子座也有这么强烈的强迫症呢&#xff1f;&#xff01; 我每次玩儿新手机必须得搞搞应用图标呀壁纸呀啥的&#xff0c;必须得打上你“磊哥”的风格烙印。但是国内的启动器的通病就是用不了三方的app图标包…

针对小程序的漏洞挖掘

0x00 前言 我们对小程序的漏洞挖掘&#xff0c;关注点还是在逻辑漏洞上面&#xff0c;下面将从环境搭建到实例一步步讲解。&#xff08;此篇文章更适合做安服的老哥们看&#xff09; 0x01 环境配置 工具&#xff1a;BurpFiddlerwindows版本微信 注: 你也可以直接用burpwindo…

面试笔试题之Linux部分58题(第一部分)

1、Linux常用的发行版 debian、Fedora、Ubuntu、redhat、centOS 等补充&#xff1a; Fedora&#xff1a;软件新&#xff0c;不稳定 redhat&#xff1a;稳定、收费 centOS&#xff1a;稳定、免费 2、在Linux里面查看指定时间段的日志文件 sed -n‘/起始时间/,/结束时间/p’ 日…

一篇文章入门知识图谱

文章目录知识图谱一、为什么需要知识图谱&#xff1f;什么是知识图谱&#xff1f;——KG的前世今生1、看到的不仅仅是字符串2、知识图谱的前世今生二、语义网络&#xff0c;语义网&#xff0c;链接数据和知识图谱1、语义网络&#xff08;Semantic Network&#xff09;2、语义网…

Python编程 元组中不允许的操作

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.元组知识点 1.元组中不允许的操作(熟悉) 2.元组与列表之间的转换(掌握…