作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者!
个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏
当前专栏:Spring5应用专栏_Aomsir的博客
软件版本
- JDK 1.8+
- Apache Maven 3.5 +
- IntelliJ IDEA 2021+
- Spring Framework 5.1.4
环境搭建
Spring的依赖
我们需要在pom.xml文件中引入spring-context依赖,它是我们Spring框架的核心依赖,不仅为我们提供IoC容器的功能,还会隐式自动帮我们导入spring-aop、spring-beans、spring-context、spring-core、spring-expression、spring-jcl这些关键依赖。这意味着,通过简单地添加 spring-context,开发者将得到 Spring 框架为构建现代应用程序提供的大部分基本功能。这些依赖提供了如依赖注入、面向切面编程、核心容器、表达式语言处理等功能,使得开发者能更便捷、高效地构建强大且可维护的应用。如下图
org.springframework
spring-context
5.1.4.RELEASE
Spring配置文件
Spring的配置文件是其核心的一部分,它为我们提供了一个方式来定义和管理应用中的对象及它们的相互关系 放置位置:配置文件可以被放在项目的任何位置,并没有一个固定的标准,但常见的做法是将其放在类路径(classpath)下,以便于系统在启动时轻松地找到和加载它 命名规约:关于文件的命名,Spring 并不强制特定的规定。但根据官方建议,一般使用 applicationContext.xml 作为文件名,因为这个名字清晰地表示了它的用途 —— 描述应用的上下文(ApplicationContext)
在实际开发中,为了与工具、IDE或构建工具如 Maven 的标准结构相适应,我们经常将 applicationContext.xml 放在 src/main/resources 目录下。对于使用 IntelliJ IDEA 的开发者,当在IDE中新建一个 Spring 的配置,IDEA 会自动识别这个结构,补充必要的内容,并引入 Spring 的默认 schema,从而简化了配置过程和减少了出错的机会
核心API - ApplicationContext
作用:Spring提供的ApplicationContext这个工厂,用于对象的创建与管理等
好处:解耦合
为什么ApplicationContext是接口类型?
作用:屏蔽实现的差异,将实现交给其具体的实现类
非Web环境使用其实现类 ClassPathXmlApplicationContext,用于在main方法以及Junit单元测试中使用
Web环境下使用其实现类 XmlWebApplicationContext,用于Web应用程序的环境下
ApplicationContext是一个重量级资源
ApplicationContext工厂是一个内存占用较大的重量级资源,因此在一个应用中通常只创建一次以避免重复开销,同时保证其线程安全,可供多线程并发访问
程序开发
Spring的使用方法与之前讨论的设计模式篇章使用方法高度相似。它主要包括三个关键步骤:定义类的类型、在配置文件中进行相应设置,然后通过工厂类来获取实例化的对象
配置文件
当我们初次创建springContext.xml配置文件时,IDEA已经为我们自动添加了beans标签和相关的schema。接下来,我们只需要在其中添加bean标签。回顾我们在设计模式章节中使用的实体类,仅需在bean标签内指定id和class属性。其中,id应保持全局唯一性,而class则是类的完整限定名。此id和class的配置方式与设计模式章节中的applicationContext.properties非常相似,区别仅在于它们的载体类型
工厂获取对象
在进行JUnit单元测试时,我们选择使用ClassPathXmlApplicationContext这个实现类来创建工厂对象。在这个过程中,系统会读取Spring的配置文件。之后,我们可以通过bean的id来获取并使用相应的对象进行使用
public class TestSpring {
/**
* 用于测试Spring的第一个程序
*/
@Test
public void test2() {
// 1、创建Spring工厂对象(参数为Spring配置文件)
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2、通过工厂获取对象(值为这个bean的id值)
User user = (User) ctx.getBean("user");
// 3、使用对象(打印其引用)
System.out.println("user = " + user);
}
}
参考文献
- 孙哥suns说Spring5~学不会Spring? 因为你没找对人