【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文件配置的方式,如何传参 。

运行结果


 加油!别放弃!

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

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

相关文章

回首2023上半年:成长、思考、感恩

文章目录 每日一句正能量前言一、目标达成情况总结二、工作和学习成果总结三、下半年规划总结四、个人想法 后记附录 每日一句正能量 做一个向日葵族&#xff0c;面对阳光&#xff0c;不自艾自怜&#xff0c;每天活出最灿烂的自己。曾经拥有的&#xff0c;不要忘记。不能得到的…

unity 使用vrtk4的插件 打包htv vive VR客户端包,手柄不生效

背景&#xff1a; 目的&#xff1a;u3d使用vrtk开发pico应用(vrtk是为了到时候无缝衔接后续要买的htc vive pro 2) 先导入了tilia importer&#xff08;也就是vrtk4.0&#xff0c;根据教程模块化使用功能&#xff09;和pico官网下的“PICO Unity IntegrationSDK-214-20230302…

云计算行业岗位介绍

云计算、大数据、人工智能作为新一代信息技术产业&#xff0c;未来发展前景不可估量&#xff0c;就业“前途”一片光明。 随着阿里云、腾讯云、华为云为首的国内云厂商的快速发展&#xff0c;释放出来的岗位也越来越多&#xff0c;很多有着“大厂梦”的小伙伴可以通过考取大厂…

深入理解预训练(pre-learning)、微调(fine-tuning)、迁移学习(transfer learning)三者的联系与区别

1. 什么是预训练和微调 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先&#xff0c;你需要随机初始化参数&#xff0c;然后开始训练网络&#xff0c;不断调整参数&#xff0c;直到网络的损失越来越小。在训练的过程中&#xff0c;一开始初始化的参数会不断变化。…

解决github无法拉取submodule子模块的问题

引言 当使用git clone --recursive url 拉取一个配置了子模块的仓库后&#xff0c;会卡住。 同时在使用git clone 拉去https的url时&#xff0c;同样可能会出现一直卡在cloning int reposity...本文提供一个简单的脚本来解决该问题。 前置准备 需要配置好git的相关配置&…

【python】python手机评论抓取+情感分析(python代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、51CTO技术博主 &#x…

快速排序的非递归实现、归并排序的递归和非递归实现、基数排序、排序算法的时间复杂度

文章目录 快速排序的非递归三数取中法选取key快速排序三路划分 归并排序的递归归并排序的非递归计数排序稳定性排序算法的时间复杂度 快速排序的非递归 我们使用一个栈来模拟函数的递归过程&#xff0c;这里就是在利用栈分区间。把一个区间分为 [left,keyi-1][key][keyi1,right…

TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

文章目录 TypeScript 学习笔记概述TypeScript 开发环境搭建 类型注解类型推断 数据类型JS的7个原始类型Array数组object、Object 和 {}可选属性 ? 和 可选链运算符?. function函数TS类型: any类型 | unknow类型TS类型: void类型TS类型&#xff1a;never类型 &#xff08;几乎…

Signal-iOS 5.9.0编译问题

1.当我们使用pod管理 pod SDWebImage/WebP , 执行 pod install 时,发生报错.先看具体报错 : 截屏2020-07-06 上午11.12.15.png 2.报错产生原因是由于git clone 的地址是 https://chromium.googlesource.com/webm/libwebp,需要FQ 3.不想FQ,可以使用github上的地址https://githu…

vue upload 下载

目录 上传 下载 get post 对象/文件流 download处理返回 文件流 axios.post 封装axios 后端直接返回文件流&#xff0c;打开下载文件是 [object Object]&#xff0c;将res改成res.data即可 1.请求设置类型responseType: blob&#xff08;如果没有设置&#xff0c;打…

蓝牙技术|低功耗蓝牙和LE Audio助力游戏设备行业发展

去年&#xff0c;蓝牙技术联盟官方宣布推出LE Audio&#xff0c;它以BLE为基础&#xff0c;旨在更好地兼顾音频质量和低功耗&#xff0c;以在多种潜在应用中显著增强用户体验。这在游戏行业中引起了轰动&#xff0c;由于其延迟显著降低&#xff0c;LE Audio在增强游戏体验方面展…