【Spring core学习二】创建Spring 项目 Spring的存

目录

🌟一、创建最原始的Spring-core项目。

🌟二、怎么往Spring中存取对象?

🌷1、在Spring中存对象

🌷2、通过getBean获取对象的三种方式

🌷3、通过factory方式获取对象

🌟三、对存对象的优化:添加注解存储 Bean 对象

🌷1、类注解:五大注解

1.1 五大注解的使用方法:@Controller(控制器存储)

1.2 五大注解之间的关系

🌷2、方法注解@Bean

🌷3、重命名@Bean

3.1 对Bean重命名

3.2 五大注解的重命名

3.3 如何给@Bean添加参数


🌟一、创建最原始的Spring-core项目。

1、创建一个maven项目。

 2、引入Spring依赖。

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

 3、添加一个启动类


🌟二、怎么往Spring中存取对象?

首先知道对象。在Spring中对象也叫作Bean。

🌷1、在Spring中存对象

先创建一个对象:比如User类。——> 在Spring中进行定义管理:在resources文件下,新建一个xml文件名为“spring-config.xml”,写入以下代码(下面的代码就是对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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

🌷2、通过getBean获取对象的三种方式

方式1:id要是唯一的。有两个对应关系。id指的是对象的id,class后的路径是全限类名(包名称.类名)

当一个类有多个对象的时候:成功

方式2:类获取

 当一个类有多个对象的时候:报错

 方式3:上面两种的结合

 验证上面三种方式拿到的对象不是同一个?

🌷3、通过factory方式获取对象

已经不推荐使用了。

 问题1:beanFactory与ApplicationContext方式的区别?

(1)共同点:都是用于获取Springbean的;

(2)不同点:

  • Spring 容器有两个顶级的接⼝BeanFactory 和ApplicationContext。其中 ApplicationContext是BeanFactory的一个子类。它除了继承了 BeanFactory 的所有功能之外,还拥有独特的特性,还添加了对国际化⽀持、环境、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • ApplicationContext 是提前将所有的bean全部加载完,使用的时候直接获取,⽽BeanFactory 是懒加载的方式,使用的时候才去创建。


🌟三、对存对象的优化:添加注解存储 Bean 对象

🌷1、类注解:五大注解


1.1 五大注解的使用方法:@Controller(控制器存储)

 创建spring-config.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">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

我们先来观察下面两种现象:

现象1: 

(1)配置扫描路径:spring-configxml文件下

  

(2)在类上加注解

 (3)main方法中


现象2:

        我现在对上面的代码只改动一处:将类名从UseController改为UController。理论上来说没有任何问题吧,名字又不影响代码本身运行。但是当我们运行代码之后,结果却出乎意料,它竟然报错了。这个时候我们就要俩看一下源码来观察到底Bean是怎么命名的?


 看源码观察Bean的名称的命名规则(重点)

所以现象2中,name(也就是传进来的类名UController)长度大于1并且名字前两位是大写,返回的是名字自身,因此代码应该这样写:


当名称前两个字母是大写并且长度大于1的时候,要写类名本身。

否则是:类名的第一个字母小写即可。

(还有一种重命名的方式,见第三节介绍!)

@Service(控制器存储)@Repository(仓库存储)@Component(组件存储)@Configuration(配置存储)用法都同上。

问题2:为什么要用这么多注解?

        为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类的⽤途。提升性能。

1.2 五大注解之间的关系

@Controller / @Service / @Repository / @Configuration都是属于 @Component 的“⼦类”。

🌷2、方法注解@Bean

1、@Bean必须搭配五大注解使用; 

2、@Bean的名称是方法名,要一模一样! 

🌷3、重命名@Bean

 3.1 对Bean重命名

(1)情况1:单个名称

@Bean后面给定新的名称,在getBean获取的时候也是新的名称。

@Bean("ccc")

 (2)情况2:多个名称

@Bean(name= {"aaa","bbb"})

这个重命名的 name 其实是⼀个数组,⼀个 bean 可以有多个名字。并且 name={} 可以省略。@Bean({"aaa", "bbb"})。

3.2 五大注解的重命名

 这种重命名的方式对于五大注解也是适用的!

3.3 如何给@Bean添加参数

常规写法:

(1)代码中写构造函数来传参

        user方法中需要一个Integer类型和String类型的参数,就会在容器中去找String类型和Integer类型,找到了就放进去。

后来又在想,如果有多个相同的类型的话,该找哪一个呢?然后我又做了个验证,发现如下结果:

 如果有一个,就以类型来匹配!如果有多个,就以名称来匹配! 

(2)Spring中xml文件配置的方式,如何传参 。

运行结果


 加油!别放弃!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用github的copilot;tmux中进去了> 怎么退出

1、首先要学籍认证 &#xff08;前提&#xff1a;(241条消息) Copilot使用的关卡——GitHub教育认证方法和注意事项_github教师认证_石去皿的博客-CSDN博客&#xff09; 网址&#xff1a;Are you a student? - GitHub Education (241条消息) GitHub学生认证&#xff0c;可…

微信小程序开发学习之页面导航(声明式导航和编程式导航)

微信小程序之页面导航&#xff08;声明式导航和编程式导航&#xff09; 1.0 页面导航1.1. 声明式导航1.1.1. 导航到tabBar页面1.1.2. 导航到非tabBar页面1.1.3. 后退导航 1.2. 编程式导航1.2.1. 导航到tabBar页面1.2.2. 导航到非tabBar页面1.2.3. 后退导航 1.3. 导航传参1.3.1.…

开发工具篇第25讲:阿里云MFA绑定Chrome浏览器Authenticator插件

开发工具篇第25讲&#xff1a;阿里云MFA绑定Chrome浏览器Authenticator插件 本文是开发工具篇第25讲&#xff0c;登录阿里云旗下产品时&#xff0c;需要使用mfa登录&#xff0c;每次如果要用手机看mfa码很麻烦&#xff0c; Chrome浏览器提供了一个快捷的登录方法&#xff0c;可…

Mac上提取应用APP的LOGO

1、找到想提取LOGO的应用&#xff0c;右键「显示包内容」 2、 双击【Contents】文件夹&#xff0c;再双击【Resources】文件夹 3、双击图标打开&#xff0c;选择最清晰的一帧&#xff0c;右键【导出为】 4、选择保存位置&#xff0c;格式注意选择常见格式&#xff0c;如png

通过git管理远程gitee仓库(push、pull)

通过git管理远程gitee仓库&#xff08;push、pull&#xff09; Git:是一种分布式版本控制系统&#xff0c;用于跟踪和管理软件开发项目的源代码和文件。它可以记录文件的修改历史&#xff0c;允许多人协同工作&#xff0c;并提供了撤销更改、分支管理、合并代码等功能。 Git最初…

一、对象的概念(2)

本章概要 复用继承 “是一个”与“像是一个”的关系 多态 复用 一个类经创建和测试后&#xff0c;理应是可复用的。然而很多时候&#xff0c;由于程序员没有足够的编程经验和远见&#xff0c;我们的代码复用性并不强。 代码和设计方案的复用性是面向对象程序设计的优点之一…

Spring Boot 中的 @Query 注解是什么,原理,如何使用

Spring Boot 中的 Query 注解是什么&#xff0c;原理&#xff0c;如何使用 在 Spring Boot 中&#xff0c;Query 注解是一个非常常用的注解&#xff0c;用于定义自定义查询语句。本文将介绍 Query 注解的作用、原理和使用方法。 1. Query 注解的作用 在 Spring Boot 中&#…

Linux——进程信号的发送

目录 一.信号发送的概念 首先来讲几个发送术语&#xff1a; 它有三种情况&#xff1a; 注意&#xff1a; 二.信号在内核中的表示示意图 三.信号捕捉 所以总结一下&#xff1a; 此时&#xff0c;会出现这样一个疑问&#xff1a;操作系统是如何得知现在被执行的进程是用户态…

【Spring Cloud Alibaba Seata 处理分布式事务】——每天一点小知识

&#x1f4a7; S p r i n g C l o u d A l i b a b a S e a t a 处理分布式事务 \color{#FF1493}{Spring Cloud Alibaba Seata 处理分布式事务} SpringCloudAlibabaSeata处理分布式事务&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f98…

SpringCloud(4) Eureka 如何主动下线服务节点

目录 1.直接停掉客户端服务2.发送HTTP请求1&#xff09;调用DELETE接口2&#xff09;调用状态变更接口 3.客户端主动通知注册中心下线1&#xff09;代码示例2&#xff09;补充3&#xff09;测试 一共有三种从 Eureka 注册中心剔除服务的方式&#xff1a; 1.直接停掉客户端服务…

Unity Obfuscator

官方仓库 学习日期&#xff1a;2023-07-13&#xff08;防止后续仓库特性或功能更新无对比时间&#xff09; 目标&#xff1a;本文介绍使用此github库&#xff0c;混淆unity项目的代码&#xff0c;在ILSpy中无法正确反编译。 一、说明 官方说明 配置界面 Features: ControlFlow…

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序

LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序 与传统的基于文本的语言相比&#xff0c;LabVIEW的编程和设计已被证明可以缩短开发时间。各种研究表明&#xff0c;生产率的提高在3到10倍之间。LabVIEW通过图形语言、集成开发环境和多个编译器的组合来实现这一点。 图…

Django_发送邮件

目录 一、开启SMTP服务并获取授权码 二、在Django的配置文件中添加邮箱服务配置 三、发送邮箱代码 源码等资料获取方法 使用django邮箱功能需要搭建smtp服务器&#xff0c;如果没有&#xff0c;可以使用第三方smtp服务器。 本文以第三方QQ邮箱服务器演示如何使用python的s…

接口的幂等性如何设计

前言 所谓幂等: 多次调用方法或者接口不会改变业务状态&#xff0c;可以保证重复调用的结果和单次调用的结果一致。 我们在开发中主要操作也就是CURD,其中读取操作和删除操作是天然幂等的&#xff0c;我们所关心的就是创建操作、更新操作。 创建操作一定是非幂等的因为要涉及…

SpringBoot 如何使用 MockMvc 进行 Web 集成测试

SpringBoot 如何使用 MockMvc 进行 Web 集成测试 介绍 SpringBoot 是一个流行的 Java Web 开发框架&#xff0c;它提供了一些强大的工具和库&#xff0c;使得开发 Web 应用程序变得更加容易。其中之一是 MockMvc&#xff0c;它提供了一种测试 SpringBoot Web 应用程序的方式&…

(EMQX)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到EMQX

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡&#xff0c;天线 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真…

RabbitMQ系列(27)--RabbitMQ使用Federation Exchange(联邦交换机)解决异地访问延迟问题

前言&#xff1a; (broker北京)、(broker深圳)彼此之间相距甚远&#xff0c;网络延迟是一个不得不面对的问题。有一个在北京的业务(Client北京&#xff09;需要连接(broker北京),向其中的交换器exchangeA发送消息&#xff0c;此时的网络延迟很小,(Client北京)可以迅速将消息发…

嵌入式QT- QT使用MQTT

目录 一、MQTT介绍 二、MQTT概念 2.1 订阅(Subscribtion) 2.2 会话&#xff08;Session&#xff09; 2.3 主题名&#xff08;Topic Name&#xff09; 2.4 主题筛选器&#xff08;Topic Filter&#xff09; 2.5 消息订阅 三、MQTT中的角色 3.1 客户端 3.2 服务器 四、X86平…

每个前端开发者都应知道的10个实用网站

1.Documatic Documatic 地址&#xff1a;www.documatic.com/ Documatic 是一个高效的搜索引擎工具&#xff0c;旨在帮助开发人员轻松搜索他们的代码库&#xff0c;找到特定的代码片段、函数、方法和其他相关信息。该工具旨在通过在几秒钟内快速提供准确和相关的搜索结果&…