您现在的位置是:首页 >技术交流 >Spring项目的创建与使用网站首页技术交流

Spring项目的创建与使用

安苒_ 2023-07-19 12:00:02
简介Spring项目的创建与使用

一、创建Spring项目

这里使用Maven方式创建Spring项目,分为以下三步:

  1. 创建一个普通的Maven项目
  2. 添加spring框架支持
  3. 添加启动类

注:这里创建的是一个spring的core项目,不是web项目,只需要main方法,不需要tomcat。

1.创建一个Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNnJPUh3-1683279643210)(F:	ypora插图image-20230505150912623.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YwVDob33-1683279643211)(F:	ypora插图image-20230505151529162.png)]

当java文件夹和pom.xml文件都是蓝色的,说明Maven初始化好了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8N6vhZI-1683279643212)(F:	ypora插图image-20230505151749108.png)]

如果这两个文件是灰色的,说明还在加载,可以手动重新加载。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QVygeUiz-1683279643213)(F:	ypora插图image-20230505151923041.png)]

2.添加Spring依赖

正常情况下,在项目中的pom.xml中添加Spring依赖即可。添加的依赖有两个,分别是spring-context即spring上下文和spinrg-beans即管理对象的模块。

外部库那里还可以看到添加这两个依赖之后自动产生了其他的,这是因为spring-context实现依赖于其他几个。

配置代码片段是固定的,可以在代码仓库上专门建一个仓库村这样的代码片段。

<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>

所以,目前pom.xml文件应该长这个样子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6sep2ouk-1683279643213)(F:	ypora插图image-20230505162851216.png)]

由于maven仓库在国外,所以我们在添加框架支持的过程中 很可能遇到一直刷新或者下载不下来的问题,所以为了方便学习,这里我配置了maven的国内源。下边是我的配置过程。

Maven国内源配置

说明:因为我的本地没有settings.xml文件,所以这里直接创建的新文件,如果本地已经有,需要对文件进行检查。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NwmTuw4j-1683279643214)(F:	ypora插图image-20230505153436971.png)]

如果本地没有,就创建一个同名文件,并将此文件中的内容复制到里边。

文件之后我以资源的形式上传

注意:设置需要两次,一个是当前项目,一个新项目。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ochvDfu-1683279643214)(F:	ypora插图image-20230505153827086.png)]

检查过程:

未存在,创建,并检查是不是配置了国内源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-faYOgESN-1683279643215)(F:	ypora插图image-20230505153532308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLq4kJQr-1683279643215)(F:	ypora插图image-20230505153646948.png)]

3.添加启动类

最后在创建好的项目的java文件夹下创建一个启动类。

要求:包含一个main方法

启动类的作用其实也就是为了后边获取Bean对象做准备。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZW9vBG9-1683279643215)(F:	ypora插图image-20230505154738189.png)]

二、存Bean

Java中的对象在Sping项目中叫做Bean。

存Bean分为两步,分别

  1. 创建Bean
  2. 将Bean注册到Spring容器中

1.创建一个Bean

一般是创建一个实体类例如Student类、User类,这个模板/类产生的对象交由spring管理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAyI5jXT-1683279643216)(F:	ypora插图image-20230505160738485.png)]

2.将Bean注册到容器中

具体的注册方法就是在resources库下添加配置文件spring-config.xml(名字可自行定义,但推荐使用这个),除了固定的配置代码,再使用bean标签以<id=? class=?>的形式声明Bean:

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

其中这里的id是bean的名称即类名的小写,class是bean的路径:包名+类名即类在java文件夹下的路径。一般是"com.xxx.……",这里只是演示没有分级,所以直接写类名即可。

固定代码:

<?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>

所以本例中的spring-config.xml文件应该这样写:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvUqh65v-1683279643216)(F:	ypora插图image-20230505165447524.png)]

如果飘红,尝试使用enter+alt+enter方式解决。【本文件是xml的不是java的,idea不一定能正确识别】

三、取Bean并使用Bean

取Bean分为三步:

  1. 获取Spring上下文对象
  2. 通过Spring上下文对象获取指定Bean对象
  3. 使用Bean对象

注:以下操作均是再启动类的Main方法中进行

1.创建Spring上下文对象

创建Spring上下文对象一般使用ApplicationContext这个类,除此以外还可以使用BeanFactory这个类,两者略有区别,稍后再谈。

使用ApplicationContext创建上下文对象:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M82Q154L-1683279643216)(F:	ypora插图image-20230505163540274.png)]

注意:这里有个参数是之前定义过的配置文件,一定保证名字没写错!

【再次提醒:别高估自己的拼写能力=_=】

2.获取指定的Bean对象

可以看到,获取指定Bean常见的三种方式:

  • id
  • 类型即类名.class
  • id+类名.class

这里更推荐使用第三种。虽然前两种更加简洁,但是当Bean对象有多份的时候,存多次就会出错,稍后举例说明。这里先用起来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFnsNHJE-1683279643217)(F:	ypora插图image-20230505163834886.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BOlplMIB-1683279643218)(F:	ypora插图image-20230505164134117.png)]

这样,就拿到指定Bean对象了。

此操作中注意事项:

  • Bean的id要一一对应
  • getBean虽然有很多重载,但是注意上边提到的前两种一个参数的和另一个两个参数的区别:当有一个类型被重复注册到spring-config.xml中,只能使用根据id+类型的方式获取指定Bean对象了。

3.使用Bean对象

这里我们的Student类只写了一个sayHi方法,所以这里使用bean对象的实例就只是用这个sayHi方法进行演示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fz2z9LL-1683279643218)(F:	ypora插图image-20230505164630370.png)]

运行这个main方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhAJ1WBG-1683279643218)(F:	ypora插图image-20230505165354119.png)]

这样就算大功告成了~

如果出现类似这样的报错IOException parsing XML document from class path resource [spring-cnofig.xml],但是有感觉自己没错,尝试检查classes文件下是不是有,JVM是不是运行的原来的缓存。

ApplicationContext和BeanFactory区别

观察下边的代码及运行结果:

操作:

  1. 再定义一个实体类Teacher,并注册到Spring容器中

  2. 按照推荐方法取出Student类型的bean

  3. 只调用student1的sayHi方法

观察运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RQI5OT8S-1683279643219)(F:	ypora插图image-20230505171634345.png)]

可以发现,当Spring容器中管理多个类型的Bean时,采用这两种方式运行结果不同。通过看源代码的层级结构,我们可以知道:ApplicationContext是继承于BeanFactory的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EszYdNJQ-1683279643219)(F:	ypora插图image-20230505171912005.png)]

总结:

联系:从继承关系而言,ApplicationContext和BeanFactory都是Spring容器的两个顶级的接口,并且ApplicationContext是继承于BeanFactory的;从功能角度而言,ApplicationContext和BeanFactory都有获取Spring上下文对象的功能。

区别:从功能角度而言,前者除了继承后者所有功能外还具有独特特性,添加了对国际化、资源访问及事件传播等方面的支持;从性能角度而言,前者是一次性加载并初始化所有的Bean对象,取Bean对象平均速度更快,后者是需要使用才去加载,更加轻量。

Spring存取Bean对象的基本流程

Spring读取Bean流程

  • 首先读取xml配置,扫描类文件,从配置或者注解中获取Bean的定义信息
  • 将获取的这些信息注册到Spring容器中

Spring加载/Bean流程

  • 先实例化Bean即分配内存空间
  • 再设置Bean中的属性
  • 再进行Bean的初始化

容器中同类型有多份Bean时,获取指定Bean

使用id:

没有出错,每次需要强转

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUG4REW5-1683279643219)(F:	ypora插图image-20230505172916165.png)]

使用类型:

编译通过,运行出错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-azGeMLTr-1683279643219)(F:	ypora插图image-20230505173155162.png)]

id+名称:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQhwUAZs-1683279643220)(F:	ypora插图image-20230505173404644.png)]

因此,为了代码的简洁性和唯一定位Bean的需求我们更推荐第三种方式。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。