spring之ioc初见

news2024/9/26 5:15:39

maven创建

mvn archetype:generate
# 选择7,创建快速启动项目

在这里插入图片描述
在这里插入图片描述
然后idea打开即可

idea创建

在这里插入图片描述

在这里插入图片描述
点击创建
在这里插入图片描述

使用IOC

pom.xml添加依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.20</version>
</dependency>
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.18.12</version>
</dependency>

将App和AppTest删除
在这里插入图片描述
新建Student

package com.wujilaiang.entity;

import lombok.Data;

@Data
public class Student {
    private long id;
    private String name;
    private int age;
}

传统方法

新建IocTest.java

package com.wujilaiang;

import com.wujilaiang.entity.Student;
import org.junit.Test;

public class IocTest {
    @Test
    public  void traditionFunc(){
        Student student = new Student();
        student.setId(1L);
        student.setName("张三");
        student.setAge(22);
        System.out.println(student);
    }
}

在这里插入图片描述

ioc创建

resources文件夹下新建spring.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="student" class="com.wujilaiang.entity.Student">
        <property name="id" value="1"></property>
        <property name="name" value="小明"></property>
        <property name="age" value="22"></property>
    </bean>
</beans>

编写测试方法测试

package com.wujilaiang;

import com.wujilaiang.entity.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class IocTest {
    @Test
    public  void traditionFunc(){
        Student student = new Student();
        student.setId(1L);
        student.setName("张三");
        student.setAge(22);
        System.out.println(student);
    }
    @Test
    public void IcoTest(){
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);
    }
}

在这里插入图片描述

ref使用

新建Address.java

package com.wujilaiang.entity;

import lombok.Data;

@Data
public class Address {
    private Integer id;
    private String name;
}

修改Student.java

package com.wujilaiang.entity;

import lombok.Data;

@Data
public class Student {
    private long id;
    private String name;
    private int age;
    private Address address;
}

修改spring.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="student" class="com.wujilaiang.entity.Student">
        <property name="id" value="1"></property>
        <property name="name" value="小明"></property>
        <property name="age" value="22"></property>
        <property name="address" ref="address"></property>
    </bean>
    <bean id="address" class="com.wujilaiang.entity.Address">
        <property name="name" value="山东"></property>
        <property name="id" value="1"></property>
    </bean>
</beans>

运行IcoTest
在这里插入图片描述

通过属性注入的时候需要有无参构造函数

通过构造函数注入

修改Studetn.java

package com.wujilaiang.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Student {
    private long id;
    private String name;
    private int age;
    private Address address;
}

修改spring.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--<bean id="student" class="com.wujilaiang.entity.Student">
        <property name="id" value="1"></property>
        <property name="name" value="小明"></property>
        <property name="age" value="22"></property>
        <property name="address" ref="address"></property>
    </bean>-->
    <bean id="student" class="com.wujilaiang.entity.Student">
        <constructor-arg name="id" value="1"></constructor-arg>
        <constructor-arg name="name" value="小明"></constructor-arg>
        <constructor-arg name="age" value="22"></constructor-arg>
        <constructor-arg name="address" ref="address"></constructor-arg>
    </bean>
    <bean id="address" class="com.wujilaiang.entity.Address">
        <property name="name" value="山东"></property>
        <property name="id" value="1"></property>
    </bean>
</beans>

然后测试
在这里插入图片描述
可以不写名称按照顺序配置

<bean id="student" class="com.wujilaiang.entity.Student">
    <constructor-arg value="1"></constructor-arg>
    <constructor-arg value="小明"></constructor-arg>
    <constructor-arg value="22"></constructor-arg>
    <constructor-arg ref="address"></constructor-arg>
</bean>

或者通过参数索引指定

<bean id="student" class="com.wujilaiang.entity.Student">
    <constructor-arg index="0" value="1"></constructor-arg>
    <constructor-arg index="2" value="22"></constructor-arg>
    <constructor-arg index="1" value="小明"></constructor-arg>
    <constructor-arg index="3" ref="address"></constructor-arg>
</bean>

通过运行时类获取 bean

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
Student student = (Student) applicationContext.getBean(Student.class);
System.out.println(student);

这种方式存在一个问题,配置文件中一个数据类型的对象只能有一个实例,否则会抛出异常,因为没有唯一的 bean。

配置文件

  • 通过配置 bean 标签来完成对象的管理。

    • id:对象名。
    • class:对象的模版类(所有交给 IoC 容器来管理的类必须有无参构造函数,因为 Spring 底层是通过反射机制来创建对象,调用的是无参构造)
  • 对象的成员变量通过 property 标签完成赋值。

    • name:成员变量名。
    • value:成员变量值(基本数据类型,String 可以直接赋值,如果是其他引用类型,不能通过 value 赋值)
    • ref:将 IoC 中的另外一个 bean 赋给当前的成员变量(DI)

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

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

相关文章

pytorch实战9:基于pytorch简单实现u-net

基于pytorch简单实现u-net 前言 ​ 最近在看经典的卷积网络架构&#xff0c;打算自己尝试复现一下&#xff0c;在此系列文章中&#xff0c;会参考很多文章&#xff0c;有些已经忘记了出处&#xff0c;所以就不贴链接了&#xff0c;希望大家理解。 ​ 完整的代码在最后。 本系列…

组件等比例放大——scale和zoom

scale和zoom的区别 zoom的缩放是相对于左上角的&#xff1b;而scale默认是居中缩放&#xff0c;可以通过transform-origin修改基准点zoom的缩放改变了元素占据的空间大小&#xff1b;而scale的缩放占据的原始尺寸不变&#xff0c;页面布局不会发生变化。对文字的缩放规则不一致…

K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

文章目录 一、部署K8S集群方式二、kubeadm工具搭建K8s集群2.1 资源配置2.2 服务器规划2.3 搭建流程2.3.1 操作系统初始化2.3.2 安装docker容器引擎2.3.3 安装cri-dockerd2.3.4 安装kubeadm&#xff0c;kubelet和kubectl2.3.5 master节点初始化2.3.6 加入node节点2.3.7 部署网络…

《花雕学AI》29:5秒钟就能为你的想法想出新点子?ChatGPT新点子指令模型告诉你怎么做

引言 你有没有遇到过这样的情况&#xff0c;你想出了一个想法&#xff0c;但是不知道怎么扩展或改进它&#xff1f;你有没有想过有一个工具&#xff0c;可以帮你在短时间内为你的想法生成各种新的点子&#xff1f;如果你有这样的需求&#xff0c;那么你一定要了解ChatGPT。 C…

Verilog 锁相环参数动态自动生成,Xilinx MMCM 和 PLL 动态配置频率

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/qq_46621272/article/details/130484100 Verilog 锁相环参数动态自动生成&#xff0c;Xilinx MMCM 和…

服务器中了勒索病毒,升级后的Malox勒索病毒特征,勒索病毒解密数据恢复

Mallox勒索病毒是网络上较为流行的勒索病毒&#xff0c;但是随着黑客加密技术的不断升级&#xff0c;Mallox勒索病毒的新升级版本Malox勒索病毒已经开始出现。Malox勒索病毒是一种最近在网络上广泛传播的恶意软件&#xff0c;其感染方式多种多样&#xff0c;主要以加密受害人的…

【五一创作】版本控制-从零开始学Git-02 Git中的基本概念与工作流程

前言 前面学习了版本控制系统和分布式版本控制系统-Git的相关入门知识【五一创作】版本控制-从零开始学Git-01什么是Git 一、Git中的最基本概念 注意:.git目录是一个隐藏文件夹&#xff0c;默认不可见,需要设置后才能显示出来。 二、Git状态与结构关系 2.1 三种状态 modif…

Zigbee 无线串口通信模块( DL-22 )

文章目录 一、DL-22简介二、模块配置三、串口通信(透明传输) 一、DL-22简介 DL-22无线串口模块为串口转2.4G无线模块&#xff0c;可以通过无线将两个或者多个串口连接起来。串口发入模块的数据会被模块使用无线发出&#xff0c;收到无线数据的模块会将这个数据使用串口发出&am…

大数据分析案例-基于XGBoost算法构建居民收入分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

互联网明厨亮灶智慧监管算法 yolov7

互联网明厨亮灶智慧监管系统基于pythoyolov7网络模型AI视觉图像分析技术&#xff0c;互联网明厨亮灶智慧监管算法模型可以识别人员行为及穿戴是否合规&#xff0c;不穿厨师服、不按要求穿戴厨师帽或者佩戴口罩和手套、行为如违规在后厨抽烟、出现老鼠等情景。近几年来&#xff…

数字化转型导师坚鹏:数字化时代企业管理变革与创新营销

数字化时代企业管理变革与创新营销 课程背景&#xff1a; 很多饮水机企业存在以下问题&#xff1a; 不清楚数字化时代企业面临的机遇与挑战&#xff1f; 不知道如何利用大数据发现问题与机会&#xff1f; 不清楚如何进行精准的数字化营销&#xff1f; 不知道如何进行…

【ChatGPT】ChatGPT+MindShow三分钟生成PPT

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 第一步&#xff1a;获取PPT内容大概&#xff1a; 1.打开ChatGPT镜像 2.向他提问&#xff0c;提问格式如下&#xff0c;主题替换成你想获得的信息。比如某本书的拆解&#xff0c;…

数据可视化第二版-拓展-网约车分析案例

文章目录 数据可视化第二版-拓展-网约车分析案例竞赛介绍 1等奖作品-虾虾蟹蟹哈哈的作品引言&#xff1a;背景度量指标 & 结论过程数据与思考一、数据处理二、大盘存量数据一览1. 分城市关键指标变化情况2. 各项指标相关性分析 三、数量维度分析1. 城市间比较1.1 工作日 vs…

HTML和CSS

1、概述 超文本标记语言&#xff08;HyperText Markup Language&#xff09;简称&#xff1a;HTML&#xff1b;是一种用于创建网页的标准标记语言。HTML 不是一种编程语言&#xff0c;而是一种标记语言&#xff1b;HTML文档也叫做 web 页面。 运行后的浏览器页面 我的第一个标…

鲁大师4月安卓新机性能/流畅榜:ROG游戏手机7摘得性能桂冠 vivo登顶流畅榜

性能榜&#xff1a;ROG 游戏手机7众望所归&#xff0c;摘得性能桂冠 2023年4月的手机市场也是异常火爆&#xff0c;各大厂商纷纷推出自己的旗舰手机。骁龙8 Gen2仍然是厂商们的首选芯片&#xff0c;不论是“小米照相机”、vivo折叠机还是ROG 游戏机&#xff0c;他们都纷纷搭载了…

你不能不知道的string类的基础知识

文章目录 前言string类1. 为什么要学习string类1.1 C语言中的字符串不够好用 2. 标准库中的string类2.1 string类(了解)2.2 string类的常用接口说明2.3 string类对象的容量操作2.4string类对象的访问及遍历操作2.5 string类对象的修改操作2.6 string类非成员函数2.7 vs和g下str…

《花雕学AI》大揭秘:ChatGPT 如何让你的聊天机器人更智能、更有趣、更有用

你是否想过有一个可以和你聊天、陪你玩耍、帮你学习、给你创意的机器人&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定会喜欢 ChatGPT。 ChatGPT 是一个基于 GPT-3 或者 GPT-4 技术的聊天机器人&#xff0c;可以与人类进行自然和流畅的对话。GPT-4 是目前最先进的自…

[Gitops--8]微服务前置中间件部署

微服务前置中间件部署 1. MySQL主从 1.1 创建持久化存储 使用project-admin账号 进入sangomall项目 [存储],[存储卷],sangomall-mysql-master-pvc storageclass创建详见K8s集群中部署KubeSphere 2.1章节 在k8s环境下可以看到这个sc rootks-master:~/yaml# kubectl get sc NA…

Cadence Allegro(1):手动PCB封装制作(以TYPE-C 16Pin为例)

Cadence Allegro 16.6&#xff08;1&#xff09;&#xff1a;手动PCB封装制作&#xff08;以TYPE-C 16Pin为例&#xff09; 前提摘要&#xff1a; PCB设计软件版本&#xff1a; 焊盘设计 &#xff1a;Pad Designer 16.6PCB设计 &#xff1a;PCB Editor 16.6 个人说明&#xf…

【HarmonyOS】自定义组件之ArkUI实现通用标题栏组件

【关键字】 标题栏、常用内置组件整合、ArkUI、自定义组件 1、写在前面 在上一篇文章中我们通过Java语言实现了一个通用的标题栏组件&#xff0c;有需要的可以看下&#xff0c;文章地址&#xff1a; 华为开发者论坛 现在很多朋友都已经转战ArkTS语言了&#xff0c;那么今天…