JavaEE4-Spring使用

news2024/11/13 16:45:40

目录

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/172178.html

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

相关文章

ADC架构_Flash

ADC架构_Flash 比较器做1位ADC Vin > Vref Vout High&#xff08;1&#xff09; Vin < Vref Vout Low&#xff08;0&#xff09; 比较器是组建集成ADC的内部基本而又关键的模块&#xff1b;在比较器应用在ADC中一般要求很高的分辨率&#xff0c;也就是很小的差分输…

Spring Security 认证研究

2 Spring Security 认证研究 2.1 Spring Security介绍 认证功能几乎是每个项目都要具备的功能&#xff0c;并且它与业务无关&#xff0c;市面上有很多认证框架&#xff0c;如&#xff1a;Apache Shiro、CAS、Spring Security等。由于本项目基于Spring Cloud技术构建&#xff…

java数组2023014

数组&#xff1a;首先数组也是一种类型 Java的数组要求所有的数组元素具有相同的数据类型。因此&#xff0c;在 一个数组中&#xff0c;数组元素的类型是唯一的&#xff0c;即一个数组里只能存储一种数据类型的数据&#xff0c;不能存储多种数据类型的数据。 注意&#xff1a; …

MySQL数据库约束(主键约束,外键约束详解)

关系型数据库的一个重要功能:需要保证数据的"完整性",可以通过人工的方式来观察确认数据的正确性,这种方式是可行的,但是不合适,因为人为控制的方式势必会存在疏忽,导致一些错误没有被检查出来,所以MySQL数据库定义了一些约束来帮助程序员更好的检查数据的正确系!一,…

git cherry-pick 教程

对于多分支的代码库&#xff0c;将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是&#xff0c;你需要另一个分支的所有代码变动&#xff0c;那么就采用合并&#xff08;git merge&#xff09;。另一种情况是&#xff0c;你只需要部分代码变动&#x…

目标检测-yolov1的详细理解(代码和原理)

目标检测算法&#xff0c;主要分为两类&#xff1a; 一类是以R-CNN为代表的两阶段检测算法&#xff0c;将目标检测任务分为边界框回归和物体分类两个模块二是yolo系列算法&#xff0c;是将目标检测任务看作是回归任务。 原理 yolov1将图像划分为S*S的网格&#xff0c;如果检测…

计网必会:应用层结构体系

文章目录什么是应用层应用层原理P2P模式C/S模式进程的通信原理客户和服务器进程进程发生运输服务类型TCP服务UDP服务服务选择什么是应用层 应用层原理 P2P模式 两台主机相互通信互为服务器&#xff0c;互为主机&#xff0c;可以发现&#xff0c;这样的模式下&#xff0c;如果是…

【Java寒假打卡】JavaWeb-TomCat发布动态资源

【Java寒假打卡】JavaWeb-TomCat发布动态资源Servlet的介绍实现步骤Servlet的执行流程Servlet的介绍 Servlet是运行在Java服务器端的程序&#xff0c;用于接受和响应来自客户端基于HTTP协议的请求如果想实现Servlet的功能&#xff0c;可以通过实现javax.servlet.Servlet接口或…

三、QML开发之qml 语言基础

QML就是用来编辑和生成Quick界面的语言&#xff0c;所以在开发界面之前一定要了解基础的QML语言基础知识&#xff0c;接下来从介绍qml语法如何编写&#xff0c;变量和属性 对象的简要说明&#xff0c;通过本节的学习能够达到简单的加载图片 和设置lable标签存放位置&#xff0c…

【零基础】学python数据结构与算法笔记14-动态规划

文章目录前言88.动态规划介绍89.钢条切割问题90.钢条切割问题&#xff1a;自顶向下实现91.钢条切割问题&#xff1a;自底向上实现92.钢条切割问题&#xff1a;重构解93.最长公共子序列最长公共子序列&#xff1a;实现总结前言 学习python数据结构与算法&#xff0c;学习常用的…

CSS+JS 弹窗

弹窗 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>弹窗</title><style type"text/css">.alert {display: none;justify-content: center;align-items: center;width: 100%;height: 100vh;backgro…

输入一个url后发生了什么 js性能优化

文章目录从一道题开始&#xff1a;输入一个url后发生了什么&#xff1f;1.请求协议可聊点1&#xff1a;http协议相关> 追问: http与TCP可聊点2&#xff1a; https协议相关> 追问&#xff1a;http与https2.域名解析3.web服务器4.服务(2、3)涉及到 网络优化5.浏览器渲染6.脚…

【Zookeeper】关于windows安装问题整理汇总

文章目录常规安装&#xff1a;1、windows配置zoo.cfg之后&#xff0c;提示&#xff1a;JAVA_HOME is not set.1.1 本地没有安装JDK或者没有配置JAVA_HOME解决方案&#xff0c;参考JDK安装下载办法1.2 本地配置的JDK但是环境变量JDK路劲不叫名字“JAVA_HOME”解决方案&#xff1…

docker容器将系统盘空间占满的解决办法

最近遇到一个问题&#xff0c;线上服务器的系统盘空间被占满了&#xff0c;导致服务不能正常运行了。docker启动时会报出下面这个错误no space left on device排查用到的命令&#xff0c;显示当前路径下占用空间超过1G的文件或文件夹du -h --max-depth1|grep G|sort -n经过一番…

SAP FICO 详细解析新总账功能 - 平行分类账配置

平行分类账配置 其作用简单来说就是&#xff0c;同时一笔记账&#xff0c;会产生多个账套的凭证。 【配置流程】 1、定义总账会计核算的分类账 账套可以有多个&#xff0c;但是主分类账有且只有一个。 表FAGLFLEXT就是存储所有财务分类账发生额数据的汇总表。 勾选多个“主…

CSS知识梳理

CSS的三大特性 一 . 层叠性 : 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则 : 样式冲突&#xff0c;遵循的原则是就近原则&#xff0c;哪个样式离结构近&#xff0c…

在Azure应用程序按指定时区的时间来输出日志(NLog)

部署在Azure应用程序使用NLog组件进行日志输出&#xff0c;如购买的Azure云是国际版&#xff08;非中国版Azure&#xff09;&#xff0c;默认使用国标时间&#xff08;即&#xff1a;UTC&#xff09;来输出日志时间&#xff0c;与中国地区的时间相差8小时&#xff08;即&#x…

NodeJs使用mysql.createPool连接池

1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABASE mydb1; mysql> SHOW DATABASES; -------------------- | Database | -------------------- | information_schem…

客快物流大数据项目(一百零三):快递追踪需求介绍

文章目录 快递追踪需求介绍 ​​​​​​​前言 背景介绍 快递追踪需求介绍 ​​​​​​​前言

Juicesync实现对腾讯云CHDFS存储的数据迁移

文章目录前言一、Juicesync准备二、Hadoop准备三、迁移实验四、实现思路前言 近年来&#xff0c;云计算越来越流行&#xff0c;企业从自身利益出发&#xff0c;或是不愿意被单一云服务商锁定&#xff0c;或是业务和数据冗余&#xff0c;或是出于成本优化考虑&#xff0c;会尝试…