Spring的创建和使用

简介: Spring的创建和使用

🔎Spring的创建

创建Maven项目


引入Spring依赖


添加如下代码至pom.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>

如果Jar包下载失败

可以参考这篇文章

添加启动类


🔎Spring的使用


Spring 是包含众多工具方法的IOC容器

Spring 作为一个容器. 最基本的功能为

  • 将对象存入到容器
  • 从容器中取出对象

在 Java 中, 可以将对象称为 Bean

存储Bean


存储 Bean 可以分为2个步骤

  • 创建 Bean
  • 将 Bean 存储至 Spring

创建 Bean🍂


public class User {
    public String sayHi() {
        return "hi!";
    }
}

将 Bean 存储至 Spring🍂


存储之前, 需要在 resources 下创建xml文件用于声明Spring(指引 Spring 的后续操作)

复制如下代码至xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>

将 Bean 存储至 Spring

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

注意🍭

<bean id="" class=""></bean>

  • id
  • id 是对 Bean 的编号, 此处的 id 不允许重复
  • 通常情况下, 存储 Bean 是为了能够将其获取, 而获取 Bean 依赖其对应的 id(编号)
  • class
  • class 是指 Bean 的类型, 如果 Bean 存储在某一包(Package)下, 需要在前面添加包的包名, 用.分隔
  • 例如 User 存储在 test 包下, 其 class="test.User"
  • 不省略 id 和 class
  • 无论 class 是否相同, 只要 id 不同便不会报错(通过 Id 获取 Bean)
  • 只要 class 相同, 无论 id 是否相同都会报错(通过 类型 获取 Bean)
  • 省略 class 不省略 id 运行时会报错
  • 省略 id 不省略 class
  • 只有一个该类型时运行不会报错(类型不同)
  • 有多个该类型时运行会报错(类型相同)
  • 此处的类型包含包名

对于省略 id 不省略 class 的解释🌰

类型(包名 + 类型)不同, 其运行时不会报错

包名 test1, test2

类型 User

<bean class="test1.User"></bean>

<bean class="test2.User"></bean>

类型(包名 + 类型)相同, 运行时会报错

包名 test

类型 User

<bean class="test.User"></bean>

<bean class="test.User"></bean>

获取Bean


获取 Bean 可以分为2个步骤

  • 获取 Spring
  • 从 Spring 中读取 Bean
  • 使用 Bean(非必须)

获取 Spring🍂

  • 通过ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");获取
  • 通过BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));获取

注意🍭

configLocation 需要对应 resources 下的 xml 文件

对比ApplicationContext与BeanFactory


相同点🍂

  1. 都可以获取 Spring
  2. 都是 Spring 的顶级接口(包含众多的方法)

ApplicationContext

BeanFactory

不同点🍂

  1. 继承关系
    ApplicationContext 属于 BeanFactory 的子类
  2. 功能
    BeanFactory 只有最基础的访问 Bean 的能力
    ApplicationContext 除了拥有 BeanFactory 的功能之外, 还包含更多的功能
    例如国际化🌐支持, 资源访问, 事件传播…
  3. 性能
    ApplicationContext 的加载方式是将 Bean 一次性加载(饿汉模式)
    BeanFactory 的加载方式是当需要某个 Bean 时再去加载所需的 Bean(懒汉模式)

继承关系

从 Spring 中读取 Bean🍂

  • 根据 Id 获取 BeanUser user = (User) context.getBean("user");
  • 需要将获取结果进行强转
  • user(Id)
  • 根据 类型 获取 BeanUser user = context.getBean(test.User.class);
  • test.user(test 包名 / user 类型)
  • 根据 Id + 类型 获取 Bean
    User user = context.getBean("user", test.User.class);

建议使用 Id + 类型 的方式获取 Bean

对于根据 Id 获取 Bean

当 getBean 的结果为其他引用类型时, (User)其他引用类型 → Error

对于根据 类型 获取 Bean

当 xml 文件中注入多个相同的类型时(不考虑包的情况) → Error

🔎总结


  1. 操作容器之前, 需要先有容器(创建 Spring 项目)
  2. 容器的基本功能 — 存对象(存储 Bean)
  • 创建 Bean
  • 将 Bean 存储至 Spring
  1. 容器的基本功能 — 取对象(获取 Bean)
  • 获取 Spring
  • 从 Spring 中读取 Bean

相关文章
|
3天前
|
云安全 监控 安全
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1063 5
|
10天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
711 42
|
14天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1144 41
|
14天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
881 72
大厂CIO独家分享:AI如何重塑开发者未来十年
|
2天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
|
1天前
|
人工智能 JSON 前端开发
为什么你的API文档总是被吐槽?用这份"契约指令"终结前后端战争
本文针对前后端协作中"文档过时、不准确"的痛点,提供了一套实战验证的AI指令。通过强制结构化输入和自检机制,让AI自动生成包含完整参数、JSON示例和多语言代码的标准API契约文档,彻底解决接口沟通难题。
162 111
|
10天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
535 31

热门文章

最新文章