【JavaEE进阶】Spring创建与使用

文章目录

  • 一. 创建 Spring 项目
    • 1.1 创建一个Maven项目
    • 1.2 添加Spring依赖
    • 1.4. 创建一个启动类
  • 二. 将 Bean 对象存放至 Spring 容器中
  • 三. 从 Spring 容器中读取到 Bean
    • 1. 得到Spring对象
    • 2. 通过Spring 对象getBean方法获取到 Bean对象【DI操作】

一. 创建 Spring 项目

接下来使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,创建 Spring 项⽬和 Servlet 类似,总共分为以下 3步:

  1. 创建⼀个普通 Maven 项⽬。
  2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
  3. 添加启动类。

1.1 创建一个Maven项目

此处使用的IDEA版本为2021.3.2.
在这里插入图片描述
在这里插入图片描述
注意:项目名称中不能有中文.
在这里插入图片描述

1.2 添加Spring依赖

  1. 配置Maven国内源.
    IDEA设置文件有两个(一个是当前项目配置文件,新项目配置文件).需要设置这两个配置文件的国内源.
    当前项目配置文件:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置settings.xmlC:\Users\xxxflower\.m2中.
    在这里插入图片描述
    使用VScode打开文件.
    在这里插入图片描述

新项目的配置文件:
在这里插入图片描述
方法同上设置新项目的配置文件.

  1. 重新下载jar包.(可无)
    清空删除本地所有的jar包.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 添加Spring依赖
    Maven中央仓库中搜索 Spring,点击5.x.x版本复制到pom.xml中.重新reload
    在这里插入图片描述

1.4. 创建一个启动类

在这里插入图片描述

二. 将 Bean 对象存放至 Spring 容器中

  1. 创建一个bean.(在Java中一个对象如果被使用多次,就可以称之为Bean)
    在这里插入图片描述
  2. 将Bean存储到Spring容器中
    在这里插入图片描述

三. 从 Spring 容器中读取到 Bean

1. 得到Spring对象

想要从 Spring 中将Bean对象读取出来,先要得到 Spring 上下文对象,相当于得到了 Spring 容器。再通过 spring 上下文对象提供的方法获取到需要使用的Bean对象,最后就能使用Bean对象了。
ApplicationContext,也称为控制反转(IoC)容器,是 Spring 框架的核心。

实现类描述
ClassPathXmlApplicationContext(常用)加载类路径下的配置文件,要求配置文件必须在类路径下
FileSystemXmlApplicationContext可以加载磁盘任意路径下的配置文件(必须要有访问权限)
AnnotationContigApplicationContext用于读取注解创建容器
package demo;

public class Student {
    public Student() {
        System.out.println("Student 已加载!");
    }
    public void sayHi(String name) {
        System.out.println("Hello!" + name);
    }
}
package demo;

public class Teacher {
    public Teacher() {
        System.out.println("Teacher 已加载!");
    }
    public void sayHi(String name) {
        System.out.println("Hello!" + name );
    }
}

在这里插入图片描述

import demo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //1.得到 Spring
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
}

运行结果:
在这里插入图片描述
程序启动,ApplicationContext创建时,会将所有的Bean对象都构造,类似于饿汉的方式。

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App2 {
    public static void main(String[] args) {
        // 1. 得到 bean 工厂
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    }
}

运行结果:
在这里插入图片描述程序启动,在BeanFactory创建时,结果中没有如何输出,只要不去获取使用Bean就不会去加载,类似于懒汉的方式。

2. 通过Spring 对象getBean方法获取到 Bean对象【DI操作】

获取getBean的三种方式:

  1. 根据Bean的名字来获取
Student student = (Student) context.getBean("student");

此时返回的是一个Object对象,需要我们去进行强制类型转换。

  1. 根据Bean类型获取
Student student = context.getBean(Student.class);

这种方式当beans中只有一个类的实例没有问题,但是个有多个同类的实例,会有问题,即在 Spring 中注入多个同一个类的对象,就会报错。
在这里插入图片描述
在这里插入图片描述
抛出了一个NoUniqueBeanDefinitionException异常,这表示注入的对象不是唯一的.

  1. 根据名称 + 类型获取
Student student = context.getBean("student",Student.class);

运行结果:
在这里插入图片描述
相比方式1更好,也是较为常用的方法.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式开发学习(STC51-9-led点阵)

内容 点亮一个点; 显示数字; 显示图像; LED点阵简介 LED 点阵是由发光二极管排列组成的显示器件 通常应用较多的是8 * 8点阵,然后使用多个8 * 8点阵可组成不同分辨率的LED点阵显示屏,比如16 * 16点阵可以使用4个8 *…

现代C++中的从头开始深度学习:【4/8】梯度下降

一、说明 在本系列中,我们将学习如何仅使用普通和现代C编写必须知道的深度学习算法,例如卷积、反向传播、激活函数、优化器、深度神经网络等。 在这个故事中,我们将通过引入梯度下降算法来介绍数据中 2D 卷积核的拟合。我们将使用卷积和上一个…

Linux6.32 Kubernetes kubeadm部署

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes kubeadm部署一、kubeadm搭建 Kubernetes v1.20(一主两从)1.环境准备2.所有节点安装docker3.所有节点安装kubeadm,kubelet和kubectl4.部署K8S集群 二、kubeadm搭建 Kubernetes v1.20&…

没有进度管理的项目,都是在做无用功

在项目管理过程中,最大的挑战之一是确保项目实施与计划保持一致。 项目实施过程是一个相对漫长的过程,其中受到许多因素的影响。如果项目实施没有按照原始项目计划进行,很容易导致项目偏离计划,最终可能导致项目停滞或失败。 当…

vue+iviewUi+oss直传阿里云上传文件

前端实现文件上传到oss(阿里云)适用于vue、react、uni-app,获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…

Django基础

1.Django基础 路由系统视图模板静态文件和媒体文件中间件ORM(时间) 2.路由系统 本质上:URL和函数的对应关系。 2.1 传统的路由 from django.contrib import admin from django.urls import path from apps.web import viewsurlpatterns …

数据结构【哈夫曼树】

哈夫曼树 哈夫曼树的概念哈夫曼树的构造构造算法的实现哈夫曼树应用哈夫曼编码哈夫曼编码的算法实现 哈夫曼树的概念 最优二叉树也称哈夫曼 (Huffman) 树,是指对于一组带有确定权值的叶子结点,构造的具有最小带权路径长度的二叉树。权值是指一个与特定结…

【Hystrix技术指南】(6)请求合并机制原理分析

[每日一句] 也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使…

源码分析——LinkedList源码分析

文章目录 1.LinkedList简介2.内部结构分析3.LinkedList源码分析3.1构造方法3.2add方法3.3根据位置取数据的方法3.4根据对象得到索引的方法3.5检查链表是否包含某对象的方法: 1.LinkedList简介 LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底…

以技术驱动反欺诈,Riskified 为企业出海保驾护航

如今,全球对于线上消费的需求日益增长,各类新型支付方式也层出不穷。在国内,线上支付有着较为完善的法律及监管条例,格局基本已定型。但对于出海商家而言,由于不同国家和地区的支付规则和监管机制不同,跨境…

【PostgreSQL内核学习(十一)—— OpenGauss源码学习(CopyTo)】

可优化语句执行 概述什么是列存储?列存的优势 相关函数CopyToCStoreCopyToCopyStatetupleDescCStoreScanDesc CStoreBeginScanRelationSnapshotProjectionInfo GetCStoreNextBatchRunScanFillVecBatchCStoreIsEndScan CStoreEndScan 声明:本文的部分内容…

使用docker搭建GPT服务

不用ChatGPT账号,不用API,直接免费使用上官方原版的GPT4.0! 这个操作主要使用的是GitHub上的一个开源项目freegpt。 通过docker把这个项目打包到本地电脑上,直接就能使用上原版GPT4.0。 第一步:下载Docker 下载网址:docker.com 根据自己的电脑系统下载对应的版本即可 下…

虚拟ip地址软件哪个好 手机虚拟ip地址软件有哪些

虚拟ip地址修改器 IP转换器软件是一种用于把不同格式的IP地址转换为另一种格式的工具。下面是几种常见的深度IP转换器软件: 1. 深度IP转换器 深度IP转换器是一种收费的、简单易用的在线工具,可以将IPv4地址转换为16进制、2进制和10进制等格式。此外&am…

基于Byzer-LLM和ChatGLM-6B快速搭建一款免费的语言大模型助力电商企业

假设有一家电商企业,员工大概20-30人,企业是在淘宝等电商平台买衣服,目前在淘宝上已经上架十万种服饰, 之前淘宝限制服饰的标题描述字数,所以写的特别精简。以该公司售卖的阔腿裤为例,目前标题都是这样的: …

Kafka 概述

Kafka 为什么需要消息队列(MQ)使用消息队列的好处(1)解耦(2)可恢复性(3)缓冲(4)灵活性 & 峰值处理能力(5)异步通信 消息队列的两…

AI和ChatGPT:人工智能的奇迹

AI和ChatGPT:人工智能的奇迹 引言什么是人工智能?ChatGPT:AI的语言之王ChatGPT的工作原理ChatGPT的优势和挑战AI和ChatGPT的未来展望结论 引言 人工智能(Artificial Intelligence,简称AI)是一项令人兴奋的…

LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

今天讲 LeetCode 单周赛第 340 场,今天状态不好,掉了一波大分。 2614. 对角线上的质数(Easy) 这道题是最近第 2 次出现质数问题,注意 1 不是质数! 质数判断:$O(n\sqrt(U))$ 2615. 等值距离和…

小程序裂变怎么做?小程序裂变机制有哪些?

做了小程序就等于“生意上门”?其实并不是这样。小程序跟流量平台较为明显的区别就在于小程序并非“自带流量”,而是需要企业利用自己的营销推广能力来建立引流渠道,从而完成用户的拉新和留存、转化。因此,想要用小程序来增加自己…

直线电机模组在激光切割机上的作用

激光切割机是将从激光器发射出的激光,经光路系统,聚焦成高功率密度的激光束。激光束照射到工件表面,使工件达到熔点或沸点,同时与光束同轴的高压气体将熔化或气化金属吹走。激光切割加工是用不可见的光束代替了传统的机械刀&#…

【2.3】Java微服务:sentinel服务哨兵

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏:Java微服务 ✨特色专栏: 知识分享 &…