1.SPRING版本历程
1.1 SPRING 1.X
当时开发者,在1.x时代,特点大量xml配置文件,内部编写大量bean标签,没有注解,因为java没出现注解
1.2 spring 2.X
java5出现了,为spring的更新奠定了基础。注解和反射的技术,使得spring将xml配置中的对象ioc过程转化成了注解
@Controller @Componet @Service @Repository @Autowired @Resource @Qualifier
有一部分xml配置可以省略,何时使用注解,何时使用xml的bean配置
业务逻辑 控制层-业务层--注解配置
技术逻辑 持久层引入的各种技术mybatis-hibernate 需要xml支持
1.3spring 3.x
进一步的做了注解的扩展,@Configuration @Bean @ComponentScan.将xml的配置,标签配置转化到代码(注解加反射)。从整个版本开始,spring的容器使用,就已经可以接近完整的抛弃省略xml的使用,完全使用代码代替xml配置
- @Configuration
使用类代替xml配置文件,编写一个类,在类上添加这个注解,相当于之前版本的一个xml配置文件
- @Bean
可以在一个配置类中使用,相当于一个在xml的bean标签。使得方法返回值称为容器的bean对象,默认使用方法名称作为bean的id值
- @ComponentScan
配合一个配置类实现功能,代替之前一个xml配置文件中<context:component-scan>
- @Import
导入配置类。当容器加载一个配置类时,当前配置类的注解使用Import完成其他配置类的一并导入。通过这种方式,入口加载配置类只有一个,实现的配置有很多个
- @ImportResource
早起阶段,没有完全摒弃xml配置开发者,亦然可以使用xml,同时也可以使用代码配置。Spring准备了在配置里加载xml配置文件
1.4spring 4.x
组合注解,随着注解在3.X越来越多,使用的组合方式也越来越丰富。spring提供了将多个注解组合到一起形成一个新的注解的功能。比如 RestController
2.SPRINGBOOT的核心注解
springboot基于spring的发展,扩展了注解,扩展了大量配置类,从而减少了开发者的代码开发
【启动时SpringBoot会为你准备很多的配置类,她们不会全部一起加载。如果添加了依赖,例如:数据库的,没给参数就不会加载该配置类,抛出异常,如果不需要传入参数等满足衍生条件,那么就会为你加载此类。】
【衍生注解:应对开发场景(大量配置类的加载使用),提供了很多的衍生注解】
springboot的原理学习的唯一线索和入口就是启动类
2.1@SpringBootApplication
这个注解是一个组合注解
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
- @SpringBootConfiguration:@Configuration换了一个名字,所以启动类本身就是一个配置类
- @ComponentScan:默认basePackage就是当前配置类的包名。
- @EnableAutoConfiguration:通过导入import将当前版本的springboot准备的大量配置类,导入到当前系统。
核心注解总结:通过一个核心注解的入口类,相当于既可以扫描满足范围的自定义一些Controller Service Component Autowired…还可以将springboot准备好的大量配置类导入进来,所以springboot为开发者提供了绝大多数开发场景
SPRINGBOOT准备的大量配置类,是否每个工程都要全部加载---答案是否定的
springboot会根据你的依赖实现加载。springboot扩展了一个Conditional衍生注解。实现了各种各样的条件限制configuration的的加载
- ConditionalOnClass:判断当前工程是否具备这个配置类加载的必要类的依赖环境,如果有,条件满足,配置类加载,如果没有条件不满足配置类不加载
当前工程是否加载了哪些配置类,可以通过debug日志级别,观察日志信息
其他的条件衍生注解
- ConditionalOnMissingClass:依赖中必须没这个类才满足条件
- ConditionalOnBean:容器中有某个bean对象满足条件
- ConditionalOnMissingBean:容器中咩有某个bean对象才满足条件
- ConditionalOnProperties
- ConditionalOnWebApplication
- ConditionalOnNotWebApplication
…