【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.得到 SpringApplicationContext 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更好,也是较为常用的方法.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

简言 最近在vue3使用swiper时,突然发现loop属性和slides-per-view属性同时存在启用时,loop生效,下一步只能生效一次的bug,上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式,布尔型。 …

etcd

文章目录 etcd单机安装设置键值对watch操作读取键过往版本的值压缩修订版本lease租约(过期机制)授予租约撤销租约keepAlive续约获取租约信息 事务基于etcd实现分布式锁原生实现官方 concurrency 包实现 服务注册与发现Go 操作 Etcd 参考 etcd etcd 是一…

一起来看看 Compose Accompanist

好久不见,真的挺久了,之前一个月写的文章比现在多半年的都多。今年第一篇文章是简单写了下 Android 14 的适配:Android 14 又来了?别扶!抬起我来吧! 今天咱们来一起看看 Compose Accompanist 吧&#xff0…

创意项目管理软件推荐:满足客户需求的完美解决方案

发现功能强大的工作管理软件,让创意大放异彩。将您团队的愿景变成引人注目的项目。 一、交付总是令人印象深刻的工作 Zoho Projects的创意项目管理软件可帮助您和您的团队在一个地方监督多个项目。使用我们的内置管理工具和模板,花更少的时间在管理上&a…

普及100Hz高刷+1ms响应 微星发布27寸显示器:仅售799元

不论办公还是游戏,高刷及低响应时间都很重要,微星现在推出了一款27寸显示器PRO MP273A, 售价只有799元,但支持100Hz高刷、1ms响应时间,还有FreeSync技术减少撕裂。 PRO MP273A的100Hz高刷新率是其最大的卖点之一&#…

[每周一更]-(第57期):用Docker、Docker-compose部署一个完整的前后端go+vue分离项目

文章目录 1.参考项目2.技能点3.GO的Dockerfile配置后端的结构如图Dockerfile先手动docker调试服务是否可以启动报错 4.Vue的Dockerfile配置前端的结构如图nginx_docker.confDockerfile构建 5.docker-compose 整合前后端docker-compose.yml错误记录(1)ip端…

macOS下Django环境搭建-docker运行Django

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

Shiro是什么?为什么要用Shiro?

前言 本文小新为大家带来 Shiro入门概述 相关知识,具体内容包括Shiro是什么,为什么要用 Shiro,Shiro与Spring Security 的对比,Shiro的基本功能(包括:基本功能框架,功能简介)&#x…

【六袆 - 国际化】SpringBoot国际化Message

模拟场景校验请求参数 private void checkParam(List<ReqAppAdminDTO> req) {// 校验管理员如果已存在&#xff0c;则抛出已存在异常req.forEach(item -> {AppAdminDO appAdminDO appAdminMapper.selectByAppIdAndAdminNo(item.getAppId(), item.getAdminNo());if (O…

Jmeter命令行运行实例讲解

1. 简介 使用非 GUI 模式&#xff0c;即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法。 1.1. 命令介绍 jmeter -n -t <testplan filename> -l <listener filename> 示例&#xff1a; jmeter -n -t test…

跨境商城系统源码的优势,助力企业海外扩张

跨境电商发展背景与趋势 随着全球化的推进和互联网技术的快速发展&#xff0c;跨境电商已成为企业海外拓展的重要途径。然而&#xff0c;跨境电商面临着诸多挑战&#xff0c;如复杂的海外市场、文化差异、海关监管等。为了解决这些问题&#xff0c;企业可以借助跨境商城系统源码…

试图将更改推送到 GitHub,但是远程仓库已经包含了您本地没有的工作(可能是其他人提交的修改)

这通常是由于其他人或其他仓库推送到了相同的分支上&#xff0c;导致您的本地仓库和远程仓库之间存在冲突。 错误信息&#xff1a; To github.com:8upersaiyan/CKmuduo.git ! [rejected] main -> main (fetch first) error: failed to push some refs to github.com:8upers…