![](https://img.haomeiwen.com/i28888492/bcd93ed032df10e2.png)
1.创建 Spring 项目
这里创建项目的环境:IDEA 2021.3.1(2021.X版本创建过程应该是相同的,如果是2022及以上IDEA其页面可能不同)、jdk1.8、spring-context 5.x。
1.1 创建一个Maven项目
打开IDEA、新建项目:
![](https://img.haomeiwen.com/i28888492/01bfd5cd59316e41.png)
注意这里选jdk1.8版本的,没有jdk1.8可以下载: Download JDK。
![](https://img.haomeiwen.com/i28888492/19d2e236faef5b2e.png)
然后next。
![](https://img.haomeiwen.com/i28888492/5d27eb7ff356540a.png)
之后Finish。加载成功后如下:
![](https://img.haomeiwen.com/i28888492/79282e5e99d23cd9.png)
1.2 添加 Spring 依赖
由于依赖或资源加载时候是从国外服务器下载的,速度很慢,所以可以配置一下国内源。
1.2.1 配置国内源
![](https://img.haomeiwen.com/i28888492/18dabc220fbe8155.png)
![](https://img.haomeiwen.com/i28888492/ebb95487838f4abf.png)
可能有的读者在如下路径没有settings.xml文件,这是第一种情况。第二种情况是默认存在,但是我们需要修改里面的内容。
![](https://img.haomeiwen.com/i28888492/c27c1b381e7a5019.png)
![](https://img.haomeiwen.com/i28888492/c579863f389a966e.png)
① 对于第一种情况:先在C:\Users\这里是你的用户名.m2\下创建一个名为settings.xml的文件,将下面的代码全部复制进去。
② 对于第二种情况:现在是C:\Users\这里是你的用户名.m2\下默认有一个settings.xml文件,现在打开这个文件。(可以用记事本,但更推荐VSCode)
找到 <mirrors>
![](https://img.haomeiwen.com/i28888492/71414b2827465602.png)
将下面代码复制进去(上面图片我已经复制了):
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
![](https://img.haomeiwen.com/i28888492/9bb2aa202de53c90.png)
注意!我们还需要再一次设置,上面是全局的设置,下面的是当前项目的设置。
![](https://img.haomeiwen.com/i28888492/fe6ee7624096b504.png)
![](https://img.haomeiwen.com/i28888492/8407a8f3796145f6.png)
最后点ok就行了。
1.2.2 添加 Spring 框架⽀持
在项⽬的 pom.xml 中添加 Spring 框架的支持,xml 配置如下(注意这里的版本必须是5.X版本的,可以去Maven Repository: Search/Browse/Explore (mvnrepository.com)网站,搜索context):
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
![](https://img.haomeiwen.com/i28888492/326e57e95d9f4827.png)
再点击右边的Maven,点刷新,等待加载依赖完成,出现了Dependencies就加载成功了。
![](https://img.haomeiwen.com/i28888492/e9ad3ce3e5c0efd3.png)
1.2.2 添加启动类
在src\main\java下右键创建一个类。
![](https://img.haomeiwen.com/i28888492/f8e9b795967723c0.png)
2.存储 Bean 对象
2.1 创建 Bean 对象
Spring是什么?IoC是什么?DI又是什么? - 掘金 (juejin.cn)
在Java中,Bean是指一种Java类,它有一些属性和方法,并且符合一定的命名规范,能够被复用和组合。也可以这么理解:在Java中一个对象如果被使用多次,就可以称为 Bean。
Spring 可以存取对象,怎么存呢?我们先创建一个Bean对象:
![](https://img.haomeiwen.com/i28888492/ca410fc3172fe3d9.png)
创建完成后,我们还需要配置一下环境才能把Bean对象存入容器中。
2.2 将 Bean 存到容器中
在resources下创建一个配置文件,可以随便起名,但是最好要望文生义,这里取名为 spring-config.xml :
![](https://img.haomeiwen.com/i28888492/ce7379b249ac86be.png)
![](https://img.haomeiwen.com/i28888492/9c251fcc4d1e7e25.png)
将下面内容复制到文件中:
<?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>
下面的内容很重要!要想把Student存入Spring容器中,我们需要在 spring-config.xml 配置文件中添加如下形式的标签:
<beans>
<bean id = "" class = "" >
</beans>
其中id标识这个类在容器中的名字,以后我们取它的时候就需要这个名字。class表示这个类的路径,注意这个路径是从java下开始。比如:我现在创建几个包,然后将Student放入。
![](https://img.haomeiwen.com/i28888492/64f272a39e77220d.png)
那么这时候的class就为com.spring.demo1.Student。
![](https://img.haomeiwen.com/i28888492/f36b3d3e807aeef2.png)
3.获取、使用 Bean 对象
3.1 创建 Spring 上下文
在经过了繁杂的配置后,我们终于到了这里,现在开始就可以敲代码了。我们已经将Student注册到Spring容器中了,那我们如何将对象取出来用呢?要想取出来,我们得先有一个上下文,可以理解为就是一个Spring。
这里创建上下文有两种方法:
① 第一种 用ApplicationContext:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AppTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
}
}
② 第二种 用BeanFactory:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class AppTest {
public static void main(String[] args) {
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
}
}
这里要注意的是 "spring-config.xml" 这里面必须是刚才的配置文件的名字!这里是从spring-config.xml中读取有哪些类要存到Spring中。
3.2 获取指定的 Bean 对象
获取Bean对象有三种方式:
public class AppTest {
public static void main(String[] args) {
//创建一个 Spring
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//第一种:形参为id,用 id 获取对象,取出 Student
//但是这种方式必须要进行强制类型转换,因为这种getBean方法 的返回类型是 Object。
Student student = (Student) context.getBean("student");
student.Hi();
//第二种:形参为 class 类型,用类型获取对象,这种形式不需要进行强制类型转换。
Student student1 = context.getBean(Student.class);
student1.Hi();
//第三种:形参为 id + class 类型,这是最推荐的写法。
Student student2 = context.getBean("student",Student.class);
student2.Hi();
}
}
结果:
![](https://img.haomeiwen.com/i28888492/daa083ec0430ce53.png)
当spring-config.xml有相同id时,第一行代码就会报错,Spring创建失败;对于第二种方式,当spring-config.xml里有多个相同类型的类的时候会报错;
3.3 ApplicationContext 与 BeanFactory 的区别
为了更清楚地描述它们的区别,我们这里多创建几个Bean类,并为每个类写一个构造方法,并把它们存入到Spring中:
![](https://img.haomeiwen.com/i28888492/8c6c5bc5b9258baa.png)
![](https://img.haomeiwen.com/i28888492/c1a4f75d62fed59c.png)
① 对于ApplicationContext:
public class AppTest {
public static void main(String[] args) {
//创建一个 Spring
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
Student student = (Student) context.getBean("student",Student.class);
student.Hi();
}
}
结果:
![](https://img.haomeiwen.com/i28888492/aafc1466b6cde85f.png)
② 对于BeanFactory:
public class AppTest {
public static void main(String[] args) {
//创建一个 Spring
BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
Student student = (Student) context.getBean("student",Student.class);
student.Hi();
}
}
![](https://img.haomeiwen.com/i28888492/51e0d360ee08d327.png)
可以看出来BeanFactory 在应用启动时并不会初始化所有的 Bean,而是在第一次请求时才会初始化。而 ApplicationContext 在启动时就会初始化所有的 Bean。这是它们的最主要的区别。
其它区别(了解):ApplicationContext接口继承了BeanFactory接口,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
当然,存取 Bean 的方式方法还有更简单更常用的,上面的只是给大家介绍一下 Spring 的基本操作。
`
网友评论