文章目录
- spring 灵魂
- Ioc
- DI
- spring蜕变
- 基于xml配置
- 注解配置
- JavaConfig能力
- spring boot 王炸
- spring变化路线
2009年,刚入行培训时,最火的三款框架struts1、hibernate、spring,我还记得那时前辈说过的一句话,“spring最大的用处是你不知道什么时候在用他”。那时候ssh的框架配置文件很多,除了web.xml,不仅关于spring的还有struts1的,各种配置文件,琳琅满目。那时候能自己独立集成这三个框架说明已是熟练工了,哪像现在即使小白也能用spring boot快速进行开发。
spring 灵魂
Ioc,Inversion of Control,控制反转。
DI,Dependency Injection,依赖注入。
Ioc
控制反转,简单来说就是创建对象不用手动去new一个对象了,使用时直接在容器里拿出来用即可。实际上来说是把对象的生命周期托管到Spring容器了,使用方式被反转了。
DI
依赖注入,简单说就是将依赖关系动态的注入到容器中。因为早期spring版本中,主要通过xml的方式来定义Bean,Spring解析相关xml文件,并把定义的bean装载到IoC容器中。
注入方式包含,接口注入、构造器注入和setter方式注入。我使用最多的setter方法实现依赖注入。
spring蜕变
其实spring的使用变化是开发者使用的越来越方便的一个过程,其本质还是Ioc和DI。
基于xml配置
我早期接触spring框架,主要表现在使用xml文件进行对象生命周期的描述和管理,项目中存在大量的xml文件,为了便于管理,每个模块配置一个xml文件,每个xml文件中都是如下代码。
<bean id="" class="">
<property name="" ref="">
</bean>
随着项目规模越来越大,XML文件也随之增多,所以难以管理的问题也越来越突显。并且依赖关系也越来越复杂,配置文件变得“脏乱差”。所以是时候需要改变了。
注解配置
从Spring 2.X开始提供使用注解的方式来声明Bean和注入依赖关系,这样大大减少了XML的配置量。
常用注解:@Service @Repository @Controller @Component等
在application.xml文件中使用component-scan配置扫描路径。
<context:component-san base-package="com.example" />
这样在com.example包路径下的,使用@Service @Repository @Controller @Component等注解的类,都会被装载到IoC容器。
JavaConfig能力
Spring升级到3.X版本后,提供了JavaConfig能力,它就可以完全取代XML了,通过Java代码的方式完成Bean的注入。
这个时候@Configuration注解横空而出,用它标注的类就等同于一个xml文件。@Bean注解将一个对象注入IoC容器中,默认使用方法名作为该Bean的id。
@Configuration
public class XxxConfig{
@Bean
public User user(){
User user = new User();
user.SetAddress(address());
return user;
}
@Bean
public Address address(){
return new Address();
}
}
但是随着时代的进步,程序员开发越来越方便了,但是依然存在下面的问题:
- 依赖过多,导致版本兼容的问题很常见。
- 配置太多,比如MyBatis整合的化,需要配置注解驱动、数据源、事务管理器、映射器扫描等基础配置,每个项目都需要配置一遍,很多工作重复。
- 运行部署麻烦,先打包,在部署到容器上。
所以是时候需要改变了。
spring boot 王炸
spring boot主要就是简化spring应用的开发,开发者不用关注配置、版本兼容等问题,只需要通过少量代码就可以创建一个产品级的Spring应用。“约定优于配置”(Convention over Configuration)贯穿spring boot始终。
spring boot不仅简化了单体应用的开发,甚至是Spring Cloud的核心,所以未来我们继续拥抱spring boot吧。
spring变化路线