您现在的位置是:首页 >其他 >spring创建和使用网站首页其他
spring创建和使用
1.创建Spring项目
Spring既是容器,那么就有两个最基本的功能:
- 将对象存储到容器(Spring)中
- 从容器中取出对象
在Java中对象也叫做Bean,一个对象使用多次,就可以叫做Bean.所以后期遇到对象就称之为Bean.
使用Maven创建一个Spring项目,共分为3步:
- 创建一个普通的Maven项目
- 添加Spring框架支持(添加spring-context 、spring-beans依赖)。
- 添加启动类(main方法)
此处使用的是Idea 2021.3.2版本(2021.3版本插件免费),JDK8
1.1 创建一个Maven项目
点击“Finish”
- 注意:整个路径等名称不能出现中文,必须全部英文,否则会报错
1.2 添加Spring框架支持[依赖] (重点/易错)
1.2 配置settings.xml 下载jar包
链接:【settings.xml】
1.3 引入依赖
添加Spring框架支持,在项目的pom.xml中添加Spring的框架支持,如下:
- 打开Maven远程仓库,搜索spring,选择Spring Context » 5.3.26(5.3x对应的是JDK8,JDK版本对应依赖版本)
- 【如下代码是:5.3.26依赖代码,点击maven里的下载进行加载】
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.26</version>
</dependency>
</dependencies>
- 加载完成后就会有这些内容,spring-context:spring上下文,spring-beans:管理对象的模块
1.4添加启动类
在java目录下创建一个App类(application),并加给main方法就完成了【所谓启动类】
2.存储Bean对象
存储Bean对象分为2步:
- 存储Bean之前,得现有Bean,创建一个Bean
- 把Bean注册到Spring容器中
2.1创建Bean
所谓Bean对象就是Java中的一个普通类,如果一个对象被使用多次,即称为Bean对象
2.2将Bean注册到容器中
在resources
的根目录下创建spring-config.xml
配置文件
【复制下述代码到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">
</beans>
先了解最常见的几个bean里的属性,id和class
把bean存入到spring中,这个bean的名字可以叫做student【建议名字能望文生义】。
id
:为bean对象命名;
class
:存放的这个类,如果本身是有路径的【比如在com下的spring下的demo里】,就填“com.spring.demo.Student”
3.从容器里取出Bean并使用
获取并使用分3步:
- 创建Spring上下文对象,因为所有的bean对象都交给了spring管理,所以要得到spring上下文
- 通过Spring上下文获取bean对象
- 使用bean对象
ApplicationContext
这个接口就代表着Spring,得到这个接口需要new一个子类ClassPathXmlApplicationContext
,这个子类里的配置信息必须和之前创建的xml配置文件名字一致(建议直接ctrl+C 复制xml文件名).
除了ApplicationContext
还有BeanFactory
也可以得到Spring对象。
context.getBean(“student”),【括号里的名称必须要和注册Bean时里的id名称一致】说明名为student这个对象已经成为了Bean对象,只有存储到Spring里才能获取到.由于getBean返回类型为Object 所以需要强转为Student,这有个缺陷:如果在注册Bean时,没有Student这个类,此时getBean获取时为null
强转为Student,那么在使用bean对象时就会报错,因为压根没有Student对象
4.面试题ApplicationContext Vs BeanFactory
使用BeanFactory得到Spring上下文对象
用这种方式也可以获取bean对象,可以看见XmlBeanFactory有一条杠,表示为过时的,意思是官方不推荐用,但还是可以硬用的,然后在里面new一个ClassPathResource并且设置路径.
那么ApplicationContext和BeanFactory有什么区别呢?
再创建一个Teacher类,注册到Bean里.【可以自己按照上述步骤,自己创建一个Bean对象,并注册Bean到容器里】
我们把两种方法的代码只留下第1步:获取Spring对象;可以发现第1种使用
ApplicationContext
的方法,在第1步获取Spring对象时,就把xml
中所有的Bean对象存储到了Spring容器里。【可以看运行结果的构造方法打印的init ....
】而
BeanFactory
则没有进行存储Bean对象,BeanFactory是在第2步GetBean()时才会进行存储Bean对象,属于lazy load(惰性加载),只有在使用某个Bean对象时才把对应的Bean对象存储进容器。
常见面试题:ApplicationContext VS BeanFactory
从继承关系和功能方面:ApplicationContext 和 BeanFactory都是Spring容器的两个等级比较高的接口。BeanFactory是ApplicationContext 的父类,它只提供了基础的访问容器的功能。
ApplicationContext 是BeanFactory的子类,它除了基础的访问容器的功能,还有其他特有的功能,例如:支持国际化、资源访问,以及时间传播等方面。
从性能方面:
1、BeanFactory 更加轻量(耗内存少),性能低。 2、ApplicationContext 更加重量(耗内存大),性能高。
PS:ClassPathXmlApplicationContext 属于 ApplicationContext 的⼦类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。
5.获取指定Bean对象
获取Bean对象的方法总共有3种:
1.使用名字获取(id)
这样获取Bean对象有个缺陷:如果在在通过Spring上下文获取Bean对象时,在getBean方法里填写的名称与xml里注册的id 不一致,即使强制类型转换,一样会报错:”没有名为‘stu’的Bean可获得“。正确的书写:getBean里的名字一定要和id一致!!!
2.根据类型获取,此时就不需要强制类型转换了
该获取方法有一个缺陷:在获取Bean对象时,就不需要关注id(名字)是什么,因为此时是根据类型获取的,在获取时,到spring里寻找有没有,类型为Student的。但是如果在xml里注册了两次类型为Student的【Spring中一个类型可以存储多个实例】,id不同,此时就会报错:Student不唯一,找了两个,student和aaa。 student 和aaa都是Student 的实例,是会创建两个不同对象,并不会因为类型相同,名称不同,只创建一个对象.
3.根据名称和类型一起获取:此时即不需要强转也不担心Spring中一个类型存储了多个实例.【常用】