竹笋

首页 » 问答 » 灌水 » 超详细解说Spring入门程序
TUhjnbcbe - 2023/2/19 19:48:00
北京最权威的白癜风医院 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/

编写Spring的第一个程序

1.新建一个空的工程

2.输入对应的工程名称和位置

3.在新建的工程下面新建一个模块

4.选择项目类型为Maven项目,选择项目模板为quickstart,点击finish

5.输入模块的名称,模块的位置,以及Maven项目的坐标

6.点击finish即可

7.最后点击OK

8.项目构建成功后,进行简单的整理工作

新建resources资源文件夹

删除掉默认生成的App类以及AppTest类

清理不需要的pom配置

将jdk编译和运行的版本修改为1.8

9.添加Maven相关依赖,这里主要是两个依赖,如下所示:

Junit单元测试依赖

Spring的依赖

10.创建相关类(接口和接口对应的实现类)

接口代码如下所示:

接口的实现类代码如下所示:

测试类相关代码如下所示:

运行结果如下所示:

总结:上述创建业务层对象采用的是正转的方式,即程序通过new的方式主动创建对象,由开发人员主动创建对象,控制权在开发人员手上.

那么接下来我们通过Spring框架来创建业务层对象:

11.首先创建Spring配置文件beans.xml

注意:如果没有上述SpringConfig这个选项,可以在Maven设置中刷新一下,重新加载依赖就可以了.

beans.xml配置文件内容如下所示:

beans.xml配置文件解释

1.Spring-beans.xsd是Spring配置文件的约束文件,用于约束Spring配置,和MyBatis的DTD是一样的.

2.Spring的核心配置文件的根标签一定是beans

3.Spring把java对象称为bean,beans标签中用于配置多个bean.

12.在Spring配置文件中声明对象

bean标签解释

作用:声明bean,用于告诉Spring容器要创建哪个类的对象.

常见属性:

id:对象的自定义名称,和变量命名规范是一样的,Spring通过这个名称在容器中查找对象.

class:需要创建对象所对应的类的全限定名称(这里绝对不可以是接口,因为Spring底层创建对象是依赖的反射,所以必须要使用类).

注意:

一个bean标签声明一个对象,也就是说如果声明了多个bean标签,那么相当于向Spring容器中注册了多个对象.

底层原理:

1.Spring通过解析beans.xml配置文件

2.读取bean标签的class属性值,获取到类的全限定名称,通过反射创建对象

3.最后将对象保存到Spring容器中,这里的Spring容器本质就是一个map,键是id的值,值是反射创建的对象.

相关代码如下所示:

13.在测试类中获取对象并且使用,相关代码如下所示:

代码相关解释:

1.这里的配置文件的路径是相对于类路径下面的,也就是target目录下面的classes目录下面,所以我们只需要把配置文件放在resources目录下即可.

2ApplicationContext表示的就是Spring容器了,但是该类是一个接口,相关继承体系结构图如下:

ClassPathXmlApplicationContext:该类是通过XML配置文件的方式往Spring容器中注册bean对象,需要传入XML文件路径,XML文件的路径是相对于类路径下.

FileSystemXmlApplicationContext:该类是通过XML配置文件的方式往Spring容器中注册bean对象,需要传入XML文件路径,XML文件的路径是绝对路径,即磁盘位置,代码如下所示:

AnnotationConfigApplicationContext:该类是通过注解配置的方式往Spring容器中注册bean对象,需要传入bean对象所对应的Class对象.

3.从容器中获取bean对象的几种方式

方式一:通过id属性的值获取

注意:这种方式获取bean对象返回的是Object类型,需要自己手动向下转型

方式二:通过Class类型获取

注意:使用这种方式获取对象有一个弊端,如果容器中注册了多个同类型的bean,如下所示:

那么这种方式获取会抛出如下异常:

异常名称:NoUniqueBeanDefinitionException(不是唯一Bean声明异常)

产生原因:容器中存在了多个同类型的多个对象.

解决办法:同类型的对象只能有一个,或者换一种方式获取bean.

方式三:同时通过id和Class类型获取

这种方式既可以避免强制类型转换,也可以防止容器中存在多个类型bean的情况,推荐使用这种方式.

4.ApplicationContext容器中对象的装配时机

ApplicationContext容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。

可以验证一下:

由于对象是通过反射调用无参构造方法创建的,所以这里我们在对象的类里面添加一个无参构造方法,如下所示:

接着在测试类中创建Spring容器,代码如下所示:

配置文件如下所示:

执行结果如下所示:

1.以后代码中若要使用到这些对象,只需从内存中直接获取即可。这样执行效率较高,但是占用内存。

2.如果需要创建的对象没有提供无参构造方法,那么系统会自动生成无参构造方法,但是如果我们手动编写了带参构造方法,会覆盖无参构造方法,那么就会抛出如下异常.

异常名称:BeanCreationException(Bean对象创建异常)

产生原因:Spring底层创建对象使用的是无参构造方法,带参构造方法覆盖了无参构造方法,抛出NoSuchMethodException,从而抛出BeanCreationException异常.

解决办法:手动补上无参构造方法即可.

5.Spring装配原理图如下所示:

注意:在创建Spring的容器时,会创建配置文件中声明的所有对象

1
查看完整版本: 超详细解说Spring入门程序