2025年spring入门(spring入门案例)

spring入门(spring入门案例)Spring 其实就是一种开源框架 指的是 Spring Framework 具有良好的生态 这也是 Spring 经久不衰的原因 用一句话概括 Spring 就是一个集成了众多工具和方法的 IOC 容器 什么是 IOC 容器呢 IOC 的中文翻译过来就是控制反转 IOC 容器其实就是控制反转容器 那什么是控制反转呢 这个词听起来好像很高大上 其实通俗来理解就是 本来我们写 java 类的时候 创建对象

大家好,我是讯享网,很高兴认识大家。



Spring其实就是一种开源框架,指的是Spring Framework,具有良好的生态,这也是Spring经久不衰的原因

用一句话概括,Spring就是一个集成了众多工具和方法的IOC容器

什么是IOC容器呢?

IOC的中文翻译过来就是控制反转,IOC容器其实就是控制反转容器

那什么是控制反转呢?

这个词听起来好像很高大上,其实通俗来理解就是,本来我们写java类的时候,创建对象,是通过自己去new的,但是当我们控制反转之后,我们就把对象的创建和一系列读取等操作交给了Spring,Spring就帮我们完成这些操作 ,这样我们需要做的操作就两个,1.把对象存到Spring中去,2.从Spring中去取对象

我们以一部手机为例,就简易的手机,假如我们需要的有CPU,线路板,电阻来组成

这样我们传统的代码开发,就要先new一个手机,但是我们想要完成一部手机,要有一个CPU,所以再调用CPU类组装CPU,但是CPU想要组装,就必须要先组装线路板,但是线路板想要组装,就必须依靠电阻,这样我们的程序就非常耦合,我们通过一张图,更加直观的来理解


讯享网

可以看到,我们想要造一部手机,耦合度非常的高,如果我们的电阻这一栏,我们加一个电容属性,那么,我们上面的线路板中也需要把调用电阻的那一块进行修改,从而导致我们整个的代码都需要进行一个更新,这个时候,IOC的优势便体现出来了

我们只需要进行一个改进,就可以大大降低耦合度,我们可以在main函数中,将每一个对象都进行创建,然后我们可以在每一个类中,创建一个属性,用来接收下一级的对象,这样在我们进行对底层修改的时候,只需要对修改的代码进行修改和main函数中的参数进行修改即可,大大降低了带啊吗的耦合,我们也用一个图来理解

 

可以明显的看出来IOC容器的优势 

DI是一种设计模式,就是依赖注入,在我们想要运行A时,A需要依赖数据库来完成,这时候我们不会像传统开发一样,去搭建DBUtile或者去newDBUtile的对象,而是将依赖关系配置到xml文件中去,由Spring去管理,这样就可以动态的去依赖关系注入到对象之中,从而实现解耦合

这里就不去教大家如何创建Spring项目了,我们如何使用Spring呢?,需要在xml文件中去添加Spring的依赖即可

这里我们具体讲一下如何存取对象

1.1添加启动类

我们需要在java包中进行创建一个启动类,只要包含main方法即可,类似这样

 

讯享网

1.2创建Bean

什么是Bean呢?

Bean对象就是java中的普通对象,这里其实本质是一个类的写法

类似下面

讯享网

1.3存储Bean

创建好Bean之后,我们需要将其注册到Spring中去

这里我们使用最原始的方法

首先创建一个xml文件,在resource目录下,如下

这里面先将Spring的固定文件放进去,这个是Spring固定的配置文件

 

 然后我们只需要将User对象注入到Spring中即可

1.4获取Bean

我们创建Bean的目的就是为了拿来用,那我们要如何取到Bean中的属性呢

首先我们需要得到Spring的上下文对象

因为我们的Bean是交给Spring来管理的,所以需要用一个Spring 的上下文来进行操作,可以用如下的代码来实现

讯享网

不仅如此,我们还可以利用Bean Factory来作为Spring的上下文,代码如下

 

这里BeanFactory其实和上面的ApplicationContext效果是一样的,后者是前者的子类

BeanFactory 和 ApplicationContext的区别

1.二者都是Spring的顶级容器,并且ApplicationContext是BeanFactory的子类,他除了继承了BeanFactory的所有功能外,还增加了国际化支持,资源访问支持,事件传播等方面的支持

2.从性能方面,ApplicationContext属于饿汉加载(也就是一次性加载并且初始化所有的Bean对象)而BeanFactory是懒汉加载(用到哪个Bean对象就加载哪个),所以我们可以看出来,BeanFactory比ApplicationContext更加轻量

拓展:这里还有个ClassPathXmlApplicationContext类,他是Application的子类

1.5获取指定的Bean对象

这里可以通过这种方法来获取Bean对象

讯享网

注意:这里getBean中的"user"必须和xml中的Beanid保存一致

 

了解getBean()的重载方法

 

 这里也可以直接用类名来获取

或者id和类名一起使用

讯享网

这里用一张图,带大家了解一下具体的流程

1.配置扫描路径

这里我们需要告诉Spring去哪里扫描类,并存储,所以是非常重要的步骤

这里我们附上xml

 

 其中的content一行就是我们要扫描的路径

2.添加类注解

2.1@Controller(控制器存储)

我们使用可以用@Controller来让对象存入到Spring,代码示例如下

讯享网

这样我们就可以扫描到这个对象了,利用上述的App类中的main,依然可以执行

代码再次附上

 

2.2.@Service(服务存储)

代码如下

讯享网

2.3.@Repository(仓库存储)

代码如下

 

其他两个是@Component(组件存储) 和@Configuration(配置存储)使用方法都是和上面一样得到

4.类注解类型多的原因

既然我们的类注解好像功能都是一样的,那为什么我们还要分那么多类型呢?

其实还是为了区分不同注解的用途,但是都能用,这里就显示出我们Spring的宗旨了(约定大于配置)

@Controller是表示的是业务逻辑层,用于检查参数的有效性

@Service是服务层,调用持久化类实现的一些功能

@Repository是持久层的,也就是持久存储数据的,直接和数据库进行交互

@Configuration是配置层的,用于配置当前项目的一些信息

@Component是归属于公共工具类

不同的注解,调用流程是不同的,是Controller->Service->Repository

而Component是他们四个的父类

5.Bean的命名规则

5.51.类名的首字母大写,第二个字母小写

这种就是我们一般类的命名规则,这里我们直接小写首字母即可完成读取

这种也是我们最常见的

5.2.第一个和第二个字母都是大写

这里需要用原类名来读取

 5.3.源码概读

这里我们可以直接去源码查找命名规则

这里我们直接唤醒idea的搜索,去搜索beanName,可以找到下面这个类

 然后直接点进去,找到下面的方法

 很明显,这里返回值里面调用的方法就是我们想要找的命名规则

之间按住ctrl点击这个方法,去进行查看,就会得到下面的方法

 从这个方法我们

可以看到,如果我们传入的名字是null或者长度为0,他会直接返回,如果不是,那下面第一个if语句的语义就是,如果第一个字母和第二个字母都是大写的话,就直接返回名字,如果不是,则走下面的,也就是其他情况,那么我们的做法就是第一个字母小写

从这里也可以推导出,如果第一个字母小写,那么我们获取类的时候也需要第一个字母小写,也就是不需要更改

6.方法注解@Bean

方法注解就是放到某些方法上面的注解,但是需要注意,方法注解要配合类注解一起使用才有效

而且Bean注解有多种用法,这是第一种,也是最简单的一种

类似下面 

6.1Bean常规的使用

有一个User类,里面存放User对象

讯享网

                                                                                                                                                                                     

然后我们弄一个Users来存放User对象,顺便使用并@Bean注解

 

     随后我们在App类中去运行                                                                                                                 

讯享网

                          注意:这里的Bean命名规则和上面的命名规则是一致的,运行效果如下

注意:!!!!这里被Bean存入和获取的是不可以有参数的方法,因为这种方法存取参数是无法进行传递的

              证明了我们,可以正常去获得到Bean

 6.2.这里我们还可以重命名Bean

如下

 
讯享网

这里我们就给Bean重新起了一个叫u1的名字

注意:这里重命名的{}内其实是一个数组,可以存放多个Bean名,而且在读取的时候只要按照正确的方式,完全可以正常存取

7.对象装配

在上面我们都是通过applicationContext来拿到Bean的,那我们怎么样在非运行类中赋值给变量呢?

这里我们就会使用到对象装配,这里也叫注入,有三种方式:属性注入,set注入,构造方法注入

7.1.属性注入

这是实现起来最简单的,只需要在需要赋值的变量上面加个@Autowired即可

我们为了更好理解,就新建两个类,一个UserController,一个UserTest

UserController:

这个类是为了让我们拿到user对象,并且返回出去,便于UserTest调用

 

UserTest:

这个类是把上面存入的UserController 对象取出来,并且调用里面的getUserById方法,拿到User,返回给运行类,这里使用了属性注解,将Spring中的UserController 进行装配

讯享网

然后我们通过App类进行执行

 

这里需要注意,我们拿到的是UserTest对象,而UserTest被注入了UserController对象,然而通过UserController的getUserById可以拿到一个User对象,再通过UserTest的getUserById返回给运行类,即可拿到User,我们这里模拟的是从库中取数据,所以反复调用,繁琐一些

执行结果如下

7.2.构造方法注入

我们这里只改变UserTest类

讯享网

 这里我们通过构造方法进行构造,我们 通过Autowired注解,给参数UserController进行赋值,然后通过构造方法中的赋值进行注入,也可以正确得到结果,这里就不赘述

注意:当当前类只有一个构造方法时,可以省略@Autowired

7.3.set注入

这里我们还是更改UserTest方法

 

这里和上面的逻辑基本差不多,但是这里不可以省略@Autowired

7.4.三种方法比较(面试题)

重要

属性注入:

        优势:使用简单,方便

        劣势:只适用于IOC容器,只有在使用当前属性时,才会触发空指针异常

构造方法注入:

        优势:Spring官方推荐,通用,在使用之前,可以保证传入的类不为空,更符合单一设计原则

        劣势:写法比较麻烦

set注入:

        优势:基本无

        劣势:不如属性注入简介,不如构造方法通用

7.5.Resource注解关键字

我们进行类注入时,不仅可以使用Autowired还可以使用Resource,这里基本使用方法和上面一致

我们主要说一下不同的地方

1.Resource是来自于JDK的注解,而Autowired来自于Spring

2.Resource不适用于构造方法注入

3.Resource可以支持Bean设置更多参数,如name,代码如下

 Users:

讯享网

这里我们弄了两个Bean注解,那么我们就需要通过方法名来找了,但是Autowired却没有name参数,这时候,我们就可以使用Resource注解

UserResource:

 

这里我们去执行

讯享网

就可以得到下面的结果

7.6.@Qualifier

 对UserResource进行修改

 

可以得到相同的结果

这里的value可以省略,直接写@Qualifier(“getUser2”)

到这里就结束了,感谢观看 

小讯
上一篇 2025-04-18 10:18
下一篇 2025-04-14 19:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185878.html