Spring框架使用流程
一 、过程简单梳理
tomcatl启动 -》dispatcherServlet(会自动(根据springmvc-servlet.xml)创建工厂) 开启扫描,将Controller下的对应存入IOC容器中。然后客户端发送请求-》servlet->IOC容器中map中找requestMapping->调用方法即可,然后返回JSON数据。大概就是这个过程
二、 Spring的基本配置及用法
1.Maven项目中Spring框架的依赖引入
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
2.配置Spring配置文件的三种方式
(1)纯xml文件配置(applicationContext.xml)
1) 配置实体类, id唯一,class为类的全路径名称。
<bean id="myBook" class="com.sim.spring.entity.Book">
<property name="id" value="2"></property>
<property name="title" value="西游记"></property>
<property name="price" value="231.00"></property>
<property name="category" value="小说"></property>
</bean>
(2)利用注解配置(还需要xml配置文件,但相较于第一种,已经简单了)
- 在eclipse中,这个配置文件下面有namespaces,选中context
- 在applicationContext.xml文件中配置开启组件扫描(确定要扫描的包)
<context:component-scan base-package="com.sim.spring.entity" />
- 然后在实体类上面加上@Component 或者 @Controller、 @Service、@Repositiry注解中的一种,spring就会自动扫描这个类,并且自动创建对象。
@Component("myBook2")
public class Book2 implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String title;
private Double price'
private String category;
}
(3)使用配置类替代xml文件
创建一个配置类(我的名称叫做SpringConfiguration)
@Configuration
public class SpringConfiguration {
@Bean(name = "book3")
public Book3 getBook() {
return new Book3();
}
}
3.Spring如何进行单元测试
创建一个测试类:
- 上面三种的前两个基于xml文件的测试使用方式:
public class TestSpring{
final String CONFIG_LOCATION="classpath:spring/applicationContext.xml";//配置文件所在的类路径
@Test
public void testWithSpring() {
ApplicationContext factory=new FileSystemXmlApplicationContext(CONFIG_LOCATION);//创建工厂
Book book = factory.getBean("myBook",Book.class);
System.out.println(book);
Book book2 = factory.getBean("myBook",Book.class);
System.out.println(book==book2);//spring工厂是一个单例模式,所以两个book是同一个对象
}
- 基于@Configuration注解开发的配置类的测试使用方式:
@Test
public void testConfigurationAnnoations() {
ApplicationContext factory=new AnnotationConfigApplicationContext("com.sim.spring.config");//配置文件所在的包,这里不是惟一的
Book3 book = factory.getBean("book3",Book3.class);
System.out.println(book);
}
三、 Spring的IOC和DI
IOC:控制反转(原来是我需要什么自己主动创建什么,我是主动方,现在是我需要什么,IOC容器就给我自动创建并扔给我,我成了被动接收方,我的权力就发生了反转)
DI:依赖注入(我需要的对象,IOC就自动给我创建并注入给我,我就可以使用)
示例:创建两个实体类,Person和Car
@Component("c")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
private String name;
public void run() {
System.out.println("车开跑了");
}
}
Person需要Car,Spring 就会自动创建Car对象并且注入给Person对象
@Component("c")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@Autowired
private Car car;
public void drive() {
car.run();
}
}
然后进行单元测试:
public class TestSpring{
@Test
public void testIOC() {
ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:spring/applicationContext.xml");
Person person = factory.getBean("p",Person.class);
person.drive();
}
结果是正确执行,这也就验证了Spring容器的IOC和DI。