Spring系列2 -- Spring的创建和使用

Spring 就是⼀个包含了众多工具方法的 IOC容器。既然是容器那么它就具备两个最基本的功能:

  1. 将对象存储到容器(Spring)中;
  2. 从容器中将对象取出来。

 在Java中对象也叫做Bean,后续我们就把对象称之为Bean;

目录

1. 创建Spring项目(Maven创建)

1.1 创建一个Maven项目 

1.2 添加Spring 框架支持

1.3 添加启动类

2. 存储 Bean 对象

2.1 创建Bean 

2.2 将Bean注册到容器

3. 获取并使用Bean对象

3.1  创建 Spring 上下文

3.2  获取指定的 Bean 对象

3.3  使用Bean

4. 整体流程图


1. 创建Spring项目(Maven创建)

整体就分为以下三个步骤 

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

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>

从上述配置中可以看出,添加的框架有 spring-context:spring 上下文,还有 spring-beans:管理对象的模块

1.3 添加启动类

public class App {public static void main(String[] args) {// 实现代码}
}

 2. 存储 Bean 对象

存储 Bean 分为以下 2 步:

  • 1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。
  • 2. 将创建的 Bean 注册到 Spring 容器中。

2.1 创建Bean 

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

public class User {public String sayHi(String name) {return name + " hello!";}
}

2.2 将Bean注册到容器

在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示:

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

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

3. 获取并使用Bean对象

 获取并使⽤ Bean 对象,分为以下 3 步:

  • 1. 得到 Spring 上下文对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下文。
  • 2. 通过 Spring 上下文,获取某⼀个指定的 Bean 对象。
  • 3. 使⽤ Bean 对象。

如果取多个 Bean 的话重复以上第 2、3 步骤。 

具体过程如下

3.1  创建 Spring 上下文

两种获取上下文的方式

1. 使用 ApplicationContext(主流)

2. 使用 BeanFactory 

1. 使用 ApplicationContext(主流) 

// 1.得到 Spring 的上下⽂对象,创建的时候需要配置 Spring 配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

 2. 使用 BeanFactory 

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

ApplicationContext 和 BeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的子类,它们的区别如下。

  • 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接口:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量

3.2 获取指定的 Bean 对象

// 1.得到 Spring 上下⽂对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 2.加载某个 bean
User user = (User) context.getBean("user");

 Bean的id要一一对应。

getBean ⽅法的更多⽤法

getBean() ⽅法有很多种重载⽅法,我们也可以使⽤其他⽅式来获取 Bean 对象,⽐如以下这两种:
1. 根据类型获取 Bean:

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

 2. 名称 + 类型获取 Bean(常用)

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

⼆者的区别:当有⼀个类型被重复注册到 spring-config.xml 中时,只能使用根据名称获取了

3.3  使用Bean

public class App {public static void main(String[] args) {// 1.得到 Spring 上下⽂对象ApplicationContext context =new ClassPathXmlApplicationContext("springconfig.xml");// 2.加载某个 beanUser user = (User) context.getBean("user");// 3.调⽤相应的⽅法System.out.println(user.sayHi("Java"));}
}

4. 整体流程图

        上述是通过在Spring配置文件进行注入Bean对象,我们可以思考一个问题,如果我们在以后的项目中Bean对象特别多的时候,我们还要这样一个一个的添加吗?答案肯定不是,下一章节,我会总结一个更加有效率的注入Bean的方式,在配置文件中配置路径搜索的方法往容器中注入Bean对象,以及通过添加类注解的方式获取Bean对象。

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

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

相关文章

4.5 x64dbg 探索钩子劫持技术

钩子劫持技术是计算机编程中的一种技术&#xff0c;它们可以让开发者拦截系统函数或应用程序函数的调用&#xff0c;并在函数调用前或调用后执行自定义代码&#xff0c;钩子劫持技术通常用于病毒和恶意软件&#xff0c;也可以让开发者扩展或修改系统函数的功能&#xff0c;从而…

ARM64学习笔记---建立异常向量表(二)

源码: #include "mm.h" #include "sysregs.h".section .rodata .align 3 .globl el_string1 el_string1:.string "Booting at EL".section ".text.boot" .globl _start _start://读取mpidr_el1寄存器的值&#xff0c;该寄存器决定了…

高级运维开发工程师带你处理linux木马(挖矿病毒)实战例子

一、事态描述 centos7测试服务器&#xff0c;突然密码登不上去了&#xff0c;然后CPU占100%。已经猜到&#xff0c;登录密码过于简单&#xff0c;密码被破解挂马了。大概率是CPU挖矿病毒。 二、重置centos7登录root密码 步骤1 启动Linux Centos7系统&#xff0c;当出现如下画…

DevOps系列文章 之 Java使用jgit管理git仓库

最近设计基于gitops新的CICD方案,需要通过java读写git仓库&#xff0c;这里简单记录下。 在jgit中&#xff0c;存在最核心的三个组件&#xff1a;Git类&#xff0c;Repository类。Git类中包含了push commit之类的常见git操作&#xff0c;而Repository则实现了仓库的初始化和基…

使用黑盒测试在 Go 中重写 Bash 脚本

目录 前言&#xff1a; 开始 准备工作 描述行为&#xff1a;Bats 简介 行为描述&#xff1a;陷阱 描述行为&#xff1a;设计测试 重写&#xff1a;让我们开始用go吧&#xff01; 重构和更新&#xff1a;实现胜利 结论 前言&#xff1a; 使用黑盒测试在Go中重写Bash脚本…

百度--搜索引擎是怎么实现的--如何制作一个搜索浏览器

1.搜索引擎是怎么实现的&#xff1f; 搜索引擎是通过以下步骤实现的&#xff1a; 网页抓取&#xff08;Crawling&#xff09;&#xff1a;搜索引擎会使用网络爬虫&#xff08;Web Crawler&#xff09;自动地从互联网上抓取网页内容。爬虫按照一定的规则遍历网页并提取网页内容…

做题遇见的PHP函数汇总

mb_substr函数 mb_substr() 函数返回字符串的一部分&#xff0c;之前学过 substr() 函数&#xff0c;它只针对英文字符&#xff0c;如果要分割的中文文字则需要使用 mb_substr() 语法&#xff1a; mb_substr ( $str ,$start [, $length NULL [, $encoding mb_encoding() ]] …

docker中运行RabbitMq的启用插件指南

我们使用 Docker 来运行 RabbitMQ&#xff0c;有时需要启用一些插件&#xff0c;这个与正常安装的启用插件的步骤会有所不同。以下是在 Docker 中启用 RabbitMQ 插件的一般步骤&#xff1a; 首先&#xff0c;确认已经将 rabbitmq_delayed_message_exchange-3.12.0.ez 插件文件复…

adb: failed to install .\xxxxxx.apk: Failure [INSTALL_FAILED_USER_RESTRICTED

开发者模式和USB调试均已打开&#xff0c;adb安装时报错。看了一下&#xff0c;小米手机还需要开启USB安装才行。 问题已解决

《永劫无间》免费!《永劫无间》配置要求如何?

《永劫无间》于2021年7月8日开启不删档测试&#xff0c;8月12日在Steam全球公测&#xff0c;终于赶在两周年&#xff0c;2023年7月14日的炎炎夏日转为免费游戏。在《永劫无间》中&#xff0c;玩家可以选择不同的英雄&#xff0c;每个英雄都有独特的技能和风格&#xff0c;通过搜…

深入解析Redis的LRU与LFU算法实现

作者&#xff1a;vivo 互联网服务器团队 - Luo Jianxin 重点介绍了Redis的LRU与LFU算法实现&#xff0c;并分析总结了两种算法的实现效果以及存在的问题。 一、前言 Redis是一款基于内存的高性能NoSQL数据库&#xff0c;数据都缓存在内存里&#xff0c; 这使得Redis可以每秒轻…

【Python】Python项目打包发布(五)(制作Windows安装包)

Python项目打包发布汇总 【Python】Python项目打包发布&#xff08;一&#xff09;&#xff08;基于Pyinstaller打包多目录项目&#xff09; 【Python】Python项目打包发布&#xff08;二&#xff09;&#xff08;基于Pyinstaller打包PyWebIO项目&#xff09; 【Python】Pytho…