概述
Spring容器
的API有BeanFactory
和ApplicationContext
两大类,他们都是顶级接口。其中ApplicationContext 是 BeanFactory 的子接口。对于两者的说明请参考面试题讲解Spring容器部分。我们主要使用 ApplicationContext 应用上下文接口。
1.主要流程
2.开发步骤
(1)准备maven项目以及环境
首先创建一个Maven项目,名称为 spring-study ,以下是项目的maven配置文件 pom.xml :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>spring-study</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-framework.version>5.2.10.RELEASE</spring-framework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
</dependencies>
</project>
配置完成记得要刷新下maven面板哦
(2)准备启动入口类
之后就可以使用Spring框架了,Spring提供了通过xml配置文件,来定义Bean,但是定义Bean的方式需要通过包扫描的方式注册到容器中(其实还有其他方式,我们这里主要只掌握包扫描的方式)
package org.example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
//根据Spring配置文件路径创建容器:应用上下文对象
ApplicationContext context = new
ClassPathXmlApplicationContext("beans.xml");
//关闭容器
((ClassPathXmlApplicationContext) context).close();
}
}
(3)准备Spring的配置文件
定义需要加载的Bean配置文件,在 src/main/resources 下,创建 beans.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example"/>
</beans>
(4)注册Bean
在类上使用注解 @Controller , @Service , @Repository , @Component
。需要保证该类会被Spring扫描到,这种定义方式默认会注册一个名称为类名首字母小写的Bean对象到容器中。
类名称注入事项:
(5)获取Bean
定义好了Bean对象,注册到容器中以后,就可以获取Bean对象了,在入口类 org.example.App 中,可以通过 ApplicationContext 对象获取Bean,有两种方式获取:
- 通过类型获取:这种获取方式要求该类型的Bean只能有一个
- 通过名称获取:同一个类型的Bean可以有多个
package org.example;
import org.example.controller.LoginController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
根据Spring配置文件路径创建容器:应用上下文对象
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("beans.xml");
LoginController loginController = (LoginController)
applicationContext.getBean("loginController");
System.out.println(loginController);
LoginController loginController2 =
applicationContext.getBean(LoginController.class);
System.out.println(loginController2);
//执行关闭资源
((ClassPathXmlApplicationContext)applicationContext).close();
}
}