spring的基本原理在《实战》前几版中的介绍比较多,而《实战第5版》中做了简化,仅有一小节的概念讲解。现在结合第五版的介绍,对spring的基本原理做个理解。
一、 容器依赖注入
Spring提供了一个容器来运行应用,这个容器也被称为应用上下文。它们会创建和管理应用组件,这些组件就称为bean。多个bean就组成了一个应用程序,来完成应用程序的功能。
Bean的是怎么产生的。Bean可以理解为就是类的实例化,就是new 一个class出来。Bean是通过容器来实例化的,默认是采用单例的方式,一个类只创建一个实例。
Bean产生好了就要用起来。这个用起来的动作就叫装配,而装配是采用依赖注入的方式。依赖注入,简单说就是在你需要用到这个类的时候直接就能用,而且用的时候不用再去new它了,容器都已经帮你new好了。依赖注入的好处就是将实例的创建场景和使用场景分离,不用在使用的时候再去new了。需要什么工具直接找工厂要就行了,工厂都给你造好了。
依赖注入的声明可以通过构造函数或者属性访问来实现,一般在属性里面声明的比较多。在属性中声明,只要加上@Autowired注解就可以了。
二、 配置
bean的装配是通过配置来实现的。把一个类配置好了,spring容器就会去装配它。
配置的方式在Spring的历史上有很多种。
很早是用xml来配置的,在xml里声明要装配哪个类,装配成什么名字。xml配置有个问题,就是类越多,xml文件就会很多很长,xml文件群会变的很庞大,难以维护。
后来很多是用Java来配置。例如下面,@Configuration注解会告诉spring,下面是一个配置类。
@Configuration
public class ServiceConfiguration {
@Bean
public InventoryService inventoryService() {
return new InventoryService();
}
@Bean
public ProductService productService() {
return new ProductService(inventoryService());
}
}
无论是xml还是Java方式,都是一种显式的配置,在新的Spring技术中已经不再必要。
Spring借助自动装配和组件扫描技术,已经实现了自动配置。它能够在项目路径下搜索组件,并装配成bean。正如系列的第二篇文章提到的@SpringBootApplication注解,就是声明了自动配置功能。
Spring boot不仅在配置,而且依赖方面也做了大量的优化工作。例如在POM文件的 依赖声明中,依赖ID中会带有“starter”关键字,如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
"starter"的作用,就是Spring boot会根据项目的需要,将一组最优的依赖组合打包提供给用户,不需要用户再手工将一个个依赖库分别加入项目了。
三、 下一步
本章讲解了Spring的基础概念,讲的非常粗略,只是希望能够对spring项目有个大概的认识。前面搭建了一个没有任何功能的应用程序,后续将继续完成一个带页面的简单web应用。
网友评论