Spring版本历程及SpringBoot的核心注解

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值