4-Spring使用

news2024/11/15 13:03:18

目录

1.存储Bean对象到Spring容器中

1.1.创建Bean

1.2.将Bean注册到Spring容器中

1.2.1.第一次存储Bean(可选,如果是第二次及以后,此步骤忽略)

1.2.2.添加Bean标签

2.从Spring容器中获取并使用Bean对象

2.1.创建Spring上下文

2.1.1.Spring上下文对象可使用ApplicationContext

2.1.2.Spring上下文对象也可使用BeanFactory

2.1.3.(常见面试题)ApplicationContext VS BeanFactory

2.2.从Spring上下文对象中获取指定的Bean对象

2.2.1.根据id获取bean

2.2.2.根据类型获取bean

 2.2.3.根据id+类型获取bean(推荐使用)

2.3.使用Bean对象(非必须)

3.总结


1.存储Bean对象到Spring容器中

1.1.创建Bean

1.2.将Bean注册到Spring容器中

1.2.1.第一次存储Bean(可选,如果是第二次及以后,此步骤忽略)

需要自己先在创建好的项目中添加Spring配置文件spring-config.xml(命名尽量要符合语义),将此文件放到resources(存放资源文件)的根目录下。

(xml语言:是做数据信息描述的语言)

Spring配置文件的格式是固定不变的(无需记忆,自行保存即可):

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

1.2.2.添加Bean标签

将User对象注册到Spring中,具体操作是在<beans>中添加如下配置:

<beans>
   <bean id="user" class="beans.User"></bean>
</beans>

其中:

  • id:给bean起个名字(尽量符合语义),一会用的时候就用这个;且多个bean的id不重复。
  • class:要注册的对象的完整路径(包名+类名)。
  • 并不是当程序执行到这行代码时就把bean注册到Spring中了,而是当用的时候才会启动。
  • Spring中用的是懒加载(懒汉模式),SpringBoot中加注解属于饿汉模式。

2.从Spring容器中获取并使用Bean对象

(如果取多个Bean的话重复2.2.和2.3.步骤)

2.1.创建Spring上下文

得到Spring上下文对象,因为对象都交给Spring管理了,所以获取对象要从Spring中获取,那么就得先得到Spring的上下文。

2.1.1.Spring上下文对象可使用ApplicationContext

//1.得到Spring的上下文对象,创建的时候需要配置Spring配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
ClassPathXmlApplicationContext 属于 ApplicationContext 的子类,拥有 ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器。

 一定要对应一致,否则会报错。

2.1.2.Spring上下文对象也可使用BeanFactory

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

XmlBeanFactory()这个方法从Spring3.1后就过时了,可以采用上面的其他新方法来写(但写法复杂)。

2.1.3.(常见面试题)ApplicationContext VS BeanFactory

Spring容器有两个顶级的接口:ApplicationContext和BeanFactory,二者效果是一样的,区别如下:

①从继承关系和功能方面来说:

BeanFactory是ApplicationContext的父类。

BeanFactory只是提供了基础操作bean的方法,ApplicationContext除了继承BeanFactory的所有功能之外,还提供了自己独有的功能,比如:国际化支持,资源访问支持以及事件传播等方面的支持。

②从性能方面来说:

子:ApplicationContext是一次性加载并初始化所有bean,在创建对象的时候就会将所有的bean进行创建并初始化。(用户体验上更好,已经经历过加载初始化的过程,以后会快)

优点:第一次使用bean的时候比较快;

缺点:启动的时候比较慢,可能会造成资源的浪费。

父:BeanFactory是需要哪个bean才去加载哪个bean。(传统习惯节俭)

优点:是懒汉模式,不浪费任何资源;

缺点:第一次加载bean比较慢。

2.2.从Spring上下文对象中获取指定的Bean对象

getBean()方法有很多种重载方法:

2.2.1.根据id获取bean

//2.从Spring中得到bean对象
User user = (User) context.getBean("user");

context就是Spring对象的化身。

context.getBean("user")返回的是Object,此时需要强转为User。

缺点:如果是null,强转的话会报错。

另外注意:spring-config.xml中bean的id一定要和context.getBean中bean的id保持一致:

2.2.2.根据类型获取bean

User user = context.getBean(User.class);

优点:写法简单;

缺点:如果Spring中一个类型存在多个实例,不知道到底去拿哪个,那么程序就会报错:NoUniqueBeanDefinitionException(非唯一的bean异常)。

 

 2.2.3.根据id+类型获取bean(推荐使用)

User user = context.getBean("user", User.class);

此种写法通常是使用频率比较高的,推荐用法,安全。

2.3.使用Bean对象(非必须)

//3.调用相应的方法
user.sayHi("Java");

 

若程序报错,一定要自己去看报错日志,解决方案主要有:

  • 检查相关拼写是否正确;
  • 检查两个对应是否一致;
  • 检查生成的target文件夹下是否生成配置文件,若有缓存问题,删除target,重新运行,重新生成target。

3.总结

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

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

相关文章

剑指 Offer 04. 二维数组中的查找 [C语言]

目录题目思路代码结果该文章只是用于记录考研复试刷题题目 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff…

[leetcode 1723] 完成所有工作的最短时间

题目 题目&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-finish-all-jobs/description/ 该题和 [leetcode 2305] 公平分发饼干 完全相同。 解法 回溯剪枝 感觉和 [leetcode 198] 划分为k个相等的子集 有点相似&#xff0c;这题更像是划分为k个尽量相等的子…

easypoi 模板导入、导出合并excel单元格功能

easypoi 模板导入、导出合并单元格功能 参考&#xff1a; java使用poi读取跨行跨列excel springboot集成easypoi并使用其模板导出功能和遇到的坑 Easypoi Excel模板功能简要说明 easypoi 模板导出兼容合并单元格功能 ExcelUtil package com.yymt.utils;import cn.aftertu…

linux系统中利用QT实现环境传感器的数据获取方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT实现对三合一环境传感器的数据的获取和实现。 目录 第一&#xff1a;资源介绍 第二&#xff1a;具体代码的详细实现 第三&#xff1a;源文件“mainwindow.h”实现 第四&#xff1a;Linux应用接口获取数据 第…

大趋势:科技赋能产业

能整合传统产业资源的老板大优势&#xff01; 三大趋势&#xff1a; 科技赋能产业链 乡村振兴 文化复兴 纯技术类企业在产业链方面不占优势 趣讲大白话&#xff1a;时势造英雄 ******** 消费互联网竞争太卷了 竞争向产业升级方向转移 向高质量发展导向 乡村振兴是整合分散的集…

容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

容器虚拟化技术Docker&#xff08;一&#xff09;简介、安装、常见命令、数据卷、安装常规软件 1、Docker简介 1、简介 Docker的主要目标是“Build&#xff0c;Ship and Run Any App,Anywhere”&#xff0c;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&a…

web3:同态加密

web3相关学习一并收录至该博客&#xff1a;web3学习博客目录大全 目录同态加密概念同态加密具体如何定义&#xff1f;主流同态加密算法原理乘法同态加密算法① RSA算法一些基本的数学知识RSA的具体过程秘钥的产生加密解密验证了 RSA 算法的乘法同态性java代码简单实现python代码…

保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...

图片来源&#xff1a;由无界 AI 绘画工具生成2023年1月&#xff0c;保时捷中国的公关团队“忙疯”了&#xff0c;一连搞了好几个活动。有展览&#xff0c;媒体连线直播&#xff0c;甚至搞起了一场有圆桌&#xff0c;有嘉宾主题演讲的发布会。目的只有一个&#xff0c;告诉中国用…

6、Ubuntu20的JDKMySQLtomcatRedisNginx安装

安装JDK 这里以安装版本8为例 进入存放jdk目录创建目录 cd /usr/local mkdir jdk cd jdk 把下好的jdk8压缩包拖拽到Ubuntu连接用户下 移动jdk包文件 mv /home/starfish/jdk-8u351-linux-x64.tar.gz . 解压jdk tar -zxvf jdk-8u351-linux-x64.tar.gz cd jdk1.8.0_351/ p…

ubuntu20.04安装搜狗sogou输入法

环境 Ubuntu20.04 Sogou拼音输入法安装过程 Step.1 安装fcitx框架 sudo apt-get update sudo apt-get install fcitx输入winA后&#xff0c;打开Languate Support Keyboard input method system中&#xff0c;选择fcitx 点击Install/RemoveLanguates...&#xff0c;选择Ch…

面向物流行业的文档管理系统

用于运输和物流的 DocuWare 文档管理软件 物流和货运行业的效率激烈战在公路、火车、货船和空中展开。DocuWare 的快速、安全和灵活的文档管理是真正的竞争优势。在您的公司和客户的核心流程中节省新的成本和时间。 一、数字化和文档管理软件改变了物流公司的游戏规则 智能链…

PostgreSQL 技术内幕(五)Greenplum-Interconnect模块

Greenplum是在开源PostgreSQL的基础上&#xff0c;采用MPP架构的关系型分布式数据库。Greenplum被业界认为是最快最具性价比的数据库&#xff0c;具有强大的大规模数据分析任务处理能力。 Greenplum采用Shared-Nothing架构&#xff0c;整个集群由多个数据节点&#xff08;Segm…

mycat数据分片

Mycat是一个彻底开源的&#xff0c;面向企业应用开发的大数据库集群。它的定义是是一个开源的分布式数据库系统&#xff0c;是一个实现了MySQL协议的服务器&#xff0c;前端用户可以把它看作是一个数据库代理&#xff0c;用MySQL客户端工具和命令行访问&#xff0c;而其后端可以…

【题解】2023牛客寒假算法基础集训营1

目录A. World Final? World Cup! (I)思路B. World Final? World Cup! (II)C. 现在是&#xff0c;学术时间 (I)思路D. 现在是&#xff0c;学术时间 (II)思路E. 鸡算几何思路F. 鸡玩炸蛋人思路G. 鸡格线思路H. 本题主要考察了DFS思路I. 本题也主要考察了DFSJ. 本题竟也主要考察…

MySQL详细教程,2023硬核学习路线,看这一篇就够了

文章目录前言1. 数据库的相关概念1.1 数据1.2 数据库1.3 数据库管理系统1.4 数据库系统1.5 SQL2. MySQL数据库2.1 MySQL安装2.2 MySQL配置2.2.1 添加环境变量2.2.2 新建配置文件2.2.3 初始化MySQL2.2.4 注册MySQL服务2.2.5 启动MySQL服务2.3 MySQL登录和退出2.4 MySQL卸载2.5 M…

PR基础知识

sh什么是帧&#xff0c;什么是帧速率&#xff0c;什么是方形像素? 什么叫场序? # 时长 s时i长为视频时间得长度&#xff0c;基本单位为秒。但是在PR软件中。有更为精准得时间单位计算为帧。也就是说把1秒分为若干份。一份就是一帧。一帧也就可以理解为一张图片。 s所以在PR…

联合证券|未来五年是“大信创”发展的关键时期 发展空间广阔

机构指出&#xff0c;展望2023年&#xff0c;信创将从党政信创走向全面信创&#xff08;28N&#xff09;&#xff0c;叠加方针催化及疫情预期转变&#xff0c;泛信创范畴有望成为板块主线&#xff0c;孕育出许多板块的出资机会。 中心逻辑 1、2022年计算机职业大都子板块的增长…

用户行为收集到HIVE

2.3 用户行为收集到HIVE 目标 目标 知道收集用户日志形式、流程知道flume收集相关配置、hive相关配置知道supervisor开启flume收集进程管理应用 应用supervisor管理flume实时收集点击日志 2.3.1 为什么要收集用户点击行为日志 用户行为对于某项目文章推荐来说&#xff0c;至…

京东方尚未成为苹果的最大供应商,但已经享受到果链的好处

在知名分析师郭明錤表示京东方今年将成为苹果iPhone15的OLED面板主力供应商后&#xff0c;业界纷纷期待京东方在中小尺寸OLED面板市场的份额激增&#xff0c;目前虽然京东方尚未真正开始向苹果供应iPhone15的OLED面板&#xff0c;但它已开始享受到果链带来的好处。京东方量产OL…

嵌入式C语言设计模式 --- 装饰器模式

1 - 什么是装饰器模式? 装饰器模式(Decorator Pattern),是结构型设计模式的一种,装饰器模式允许向一个现有的对象添加新的功能,而又不改变其对象结构,这种方式比使用子类继承的方式更加灵活。 装饰,顾名思义,就是在原有事物的基础上,锦上添花地新增某些点缀或功能,…