Spring的创建与使用

news/2024/11/29 17:23:45/

在这里插入图片描述

请添加图片描述

⭐️前言⭐️

在了解了Spring的核心与设计思想以后,下边就是Spring的具体使用,这篇文章主要介绍Spring项目的创建和Bean对象的存放与取出。

🍉博客主页: 🍁【如风暖阳】🍁
🍉精品Java专栏【JavaSE】、【备战蓝桥】、【JavaEE初阶】、【MySQL】、【数据结构】
🍉欢迎点赞 👍 收藏留言评论 📝私信必回哟😁

🍉本文由 【如风暖阳】 原创,首发于 CSDN🙉

🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

🍉博客中涉及源码及博主日常练习代码均已上传码云(gitee)、GitHub


请添加图片描述

📍内容导读📍

  • 🍅1.创建第一个Spring项目
    • 1.1 创建一个maven项目
    • 1.2 添加Spring框架支持
    • 1.3 创建启动类和main
  • 🍅2.Bean对象的存储与读取
    • 2.1 将Bean对象存储到容器(Spring)中
      • 2.1.1 添加Spring配置文件(第一次的时候添加)
      • 2.1.2 创建bean对象
      • 2.1.3 将bean通过配置文件注册到spring中
    • 2.2 从Spring中将bean对象读取出来
      • 2.2.1 得到Spring的上下文
      • 2.2.2 根据上下文对象的getBean方法获取bean
      • 2.2.3 使用bean对象
  • 🍅3.经典面试题:ApplicationContext和BeanFactory的区别
  • 🍅4.总结

请添加图片描述

🍅1.创建第一个Spring项目

使用Maven的方式来创建一个Spring项目,创建Spring项目和Servlet类似,总共分为三步:

a)先创建一个maven项目
b)添加spring框架支持(spring-context、spring-beans)
c)创建一个启动类并添加main

1.1 创建一个maven项目

在这里插入图片描述
在这里插入图片描述

1.2 添加Spring框架支持

在项目的pom.xml中添加Spring的框架支持,xml配置如下:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.3.RELEASE</version></dependency>
</dependencies>

刷新等待加载完成:
在这里插入图片描述

1.3 创建启动类和main

最后在创建好的项目的java文件夹下创建一个启动类,包含main方法即可:

public class App {public static void main(String[] args) {System.out.println("hello,Spring!");}
}

能够正常运行说明创建Spring项目流程完成。
在这里插入图片描述

🍅2.Bean对象的存储与读取

2.1 将Bean对象存储到容器(Spring)中

完成该流程需要三步(或两步,第一次添加bean对象需要三步)

2.1.1 添加Spring配置文件(第一次的时候添加)

将创建好的项目中添加Spring配置文件spring-config.xml,将此文件放到resources的根目录下,如下图所示:
在这里插入图片描述
配置文件的内容如下,无需记忆,再次使用时复制粘贴即可:

<?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>

2.1.2 创建bean对象

所谓的Bean就是Java中一个普通的对象,实现代码如下:

package com.beans;/*** 普通的bean对象*/
public class User {public void sayHello(String name) {System.out.println("你好:"+name);} 
}

2.1.3 将bean通过配置文件注册到spring中

在这里插入图片描述
其中idclass的关系就相当于Map中的Key-Value键值对关系,bean id通常使用与类名对应的小驼峰命名。

2.2 从Spring中将bean对象读取出来

2.2.1 得到Spring的上下文

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");}
}

注意配置文件的名字一定要对应。

2.2.2 根据上下文对象的getBean方法获取bean

在这里插入图片描述
注意根据bean name获取对象时,一定要保持两者一致。

getBean的其他用法:

1.根据bean type获取bean

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

这种写法是最简单的,但容易出问题。当用一个类型注入到spring中多次的时候就会报错,程序猿可根据实际情况决定是否要使用。

2.根据bean name和类型获取bean

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

2.2.3 使用bean对象

就像使用普通的Java对象一样来使用:

user.sayHello("张三");

总体代码概览:
在这里插入图片描述

🍅3.经典面试题:ApplicationContext和BeanFactory的区别

从Spring中将bean对象读取出来不仅仅有以上一种,通过ApplicationContext上下文获取对象的方法,还可以通过BeanFactory的方法来获取:
在这里插入图片描述
那么上边这两种方法都可以从Spring容器中获取到bean对象,这两个方法有什么区别呢?

相同点
都可以实现从容器中获取bean,都提供了getBean的方法。

不同点

  • ApplicationContext 属于BeanFactory的子类。BeanFactory只提供了基础访问Bean的方法,而ApplicationContext除了拥有BeanFactory的所有功能以外,还提供了更多的方法实现,比如对国际化的支持、资源访问的支持,已经事件和传播等方面的支持。
  • 从性能方面来说,两者是不同的,BeanFactory是按需加载Bean的(相当于懒加载),而ApplicationContext是以饿汉方式来加载Bean对象的,在类加载阶段会将所有的Bean都加载起来,以备后续使用。

如果资源允许的条件下使用ApplicationContext,能够再后续使用Bean对象时更快。

🍅4.总结

在这里插入图片描述


⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

请添加图片描述


http://www.ppmy.cn/news/1565.html

相关文章

Python学习基础笔记二十一——迭代器

列表&#xff0c;我们使用for循环来取值&#xff0c;我们把每个值都取到&#xff0c;不需要关心每一个值的位置&#xff0c;因为只能顺序的取值&#xff0c;并不能跳过任何一个去取其他位置的值。那么我们为什么可以使用for循环来取值&#xff0c;for循环内部是怎么工作的呢&am…

NNDL实验 优化算法3D轨迹 pytorch版

3D轨迹有助于直观理解&#xff0c;掌握这样一个工具还是有必要的。 换模型、调参数&#xff0c;可以更加深入的了解算法。 程序改编自《神经网络与深度学习&#xff1a;案例与实践》&#xff08;Paddle版&#xff09; 7.3 不同优化算法的比较分析 神经网络与深度学习 (nndl.…

MFC列表控件的用法(基于对话框的编程)

目录 一、List Control列表控件属性 1.List Control 2.View属性 二、OnInitDialog初始化列表 1.创建List Control的变量 2.找OnInitDialog ​3. InsertColumn插入表头 4. InsertColumn设置对齐方式和列宽 5. 设置List的正文内容 ​6.循环结构创建列表 7.设置列表整行…

【torch.utils.data.sampler】采样器的解析和使用

文章目录torch.utils.data.sampler内置的Sampler基类 Sampler顺序采样 SequentialSampler随机采样 RandomSampler子集随机采样 SubsetRandomSampler加权随机采样 WeightedRandomSampler批采样 BatchSamplertorch.utils.data.sampler 内置的Sampler 基类 Sampler sampler 采样…

Java实现猜数游戏

1 问题 编写一个Java程序&#xff0c;实现以下功能&#xff1a; 2 方法 首先导入java.util包下的Random&#xff0c;让程序随便分配给用户一个数。 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。 利用Random().nextInt()生成一个随机的i…

亚马逊云科技re:Invent:Serverless是所有构想的核心

12月2日&#xff0c;2022亚马逊云科技re:Invent全球大会上&#xff0c;Amazon.com副总裁兼首席技术官Werner Vogels博士向开发者们展示了另一种可能。在一系列Serverless工具的帮助下&#xff0c;一些代码可以少写&#xff0c;因为未来你可能再也不需要写它们了。这恐怕是自云原…

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…

PostgreSQL基本运维

基础 一个系统上可以同时运行多个postgres进程&#xff0c; 只要他们使用不同的数据区和不同的端口号。 postgres 启动时需要知道数据区的位置&#xff0c;该位置必须通过-D选项或PGDATA 环境变量指定&#xff1b;没有缺省值。通常&#xff0c;-D或PGDATA 都直接指向由initdb创…