【Spring boot读书笔记】 Spring 注解驱动演变

启蒙阶段 – Spring 1.x

1.2.0
  • 支持JDK1.5+ @ManagedResource、@Transactional等

过渡阶段–> Spring 2.x

2.0
  • 支持 @Required、@Repository 、@Aspect
2.5
  • 引入依赖注入@Autowired
  • 依赖查找@Qualifier、
  • 组件声明@Component、@Service
  • SpringMVC @Conroller、@RequestMapping @ModeAttribute;
  • 支持JSR-250 @Resource
  • 支持JSR-250 生命周期回调@PostConstruct @PreDestroy ;
  • 支持自定义注解;

黄金阶段–> Spring 3.x

3.0
  • 引入配置类注解@Configuration ;
  • 引入@Import、@ImportResource;
  • 引入xml替换注解@DependsOn、@Lazy 、@Primary;
  • 引入Rest开发 @PathVariable、@ResponseStatus
3.1
  • 抽象了全新的一套配置属性API:Environment、PropertySources @PropertySource;
  • 抽象了缓存:缓存Cache、缓存管理器CacheManager @Caching @Cacheable;
  • 引入异步支持@Async、周期异步执行@Scheduled
  • 异步Web请求处理DeferredResult
  • 检验方面引入:@Valiated 整合了JS-303 Validation1.0
  • 支持@Enable 模块驱动,例如@EnableWebMvc
  • 支持@Profile条件组装

完善阶段–> Spring 4.x

4.0
  • 引入条件化注解 @Conditionnal 通过与自定义Condition实现配置,弥补之前版本条件装配的短板
  • 支持Java8,兼容了JSR-310
  • 支持@Repeatable及参数名称发现,解决了以往Annotation无法重复标注在同一个类上的限制;
4.2
  • 新增了时间监听器@EventListener,作为ApplicationListener接口编程的第二选择;
  • 新增了@AliasFor注解,解除了@Repository作为@Component的派生注解,都存在相同属性方法values()的限制,同事还能再统一注解内实现属性方法的别名;
  • 引入了@CrossOrigin作为CorsRegistry的替换方案
4.3
  • 提升并引入了@ComponentScans
  • 增强Rest特性:@GetMapping @PostMapping、@RestConroller @RestControllerAdvice

最新阶段 --Spring 5.x

5.0

  • 引入@Indexed 注解为Spring模式注解添加索引,以提升启动性能:
  • 引入了JS-305的适配注解,@NonNull @Nullable,为Java与Kotlin之间提供技术杠杠;

Spring Framework 5.0 作为Spring Boot 2.0的底层核心框架,注解驱动的性能提升不是那么明显,在Spring Boot应用场景中,大量的使用了@ComponentScan扫描指定的package,当扫描的package越来越多时,Spring模式注解的解析耗时就越长;

@Indexed不能独立存在,需要增加依赖:


        <!-- Spring 5 索引依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-indexer</artifactId>
            <version>${spring.version}</version>
            <optional>true</optional>
        </dependency>

当编译构建时,会在META-INF/spring.components文件自定生成,当Spring应用上下文执行@ComponentScan扫描时,META-INF/spring.components 被CandidateComponentsIndexLoader读取加载,并转化为CandidateComponentsIndex,进而@ComponentScan不再扫描指定package,而是读取CandidateComponentsIndex对象,从而达到提升性能的目的。不过目前这种方式存在缺陷,比如应用启动存在a.jar, b.jar 都含有META-INF/spring.components,那么扫描时@ComponentScan至扫描其中的一个;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一些 Spring Boot 面试时可能会涉及的重要知识点和面试建议: 1. 什么是 Spring BootSpring BootSpring 框架的一个子项目,它基于 Spring 框架,简化了 Spring 应用的配置和开发过程,使得开发者可以更加便捷地创建独立、生产级别的 Spring 应用。Spring Boot 提供了自动化配置、开箱即用的组件和快速启动的能力,使得开发者可以更加专注于业务逻辑的实现。 2. Spring Boot 有哪些优点? - 简化了 Spring 应用的配置和开发过程。 - 集成了众多常用的第三方库,可以快速地搭建项目。 - 提供了自动化配置和开箱即用的组件,使得开发者可以更加专注于业务逻辑的实现。 - 与 Spring Framework 完美集成,可以很方便地使用 Spring 的各种功能。 - 支持多种开发方式,包括传统的 WAR 包部署、嵌入式服务器部署、Docker 容器化部署等。 3. Spring Boot 的核心注解有哪些? - @SpringBootApplication:用于标记 Spring Boot 应用的主类,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解,可以简化应用的配置和启动过程。 - @Controller、@Service、@Repository、@Component:用于标记 Spring Bean,可以自动扫描并注册到 Spring 容器中。 - @Autowired、@Resource、@Inject:用于依赖注入,可以自动装配 Spring Bean。 4. Spring Boot 的配置文件有哪些? Spring Boot 支持多种配置文件格式,包括 properties、yml、json 等。其中,application.properties 或 application.yml 是 Spring Boot 默认的配置文件,它可以放在项目的 classpath 下,也可以通过指定 spring.config.location 属性来指定配置文件的路径。 5. Spring Boot 的自动配置原理是什么? Spring Boot 的自动配置基于条件注解和条件判断,它会根据应用的上下文环境和 classpath 中的依赖库来自动配置 Spring Bean。例如,当 classpath 中存在 HikariCP 库时,Spring Boot 会自动配置一个 HikariCP 数据源,而不需要手动配置。 6. Spring Boot 如何处理异常? Spring Boot 提供了统一的异常处理机制,可以通过 @ControllerAdvice 和 @ExceptionHandler 注解来处理应用中的异常。在异常处理类中,可以通过 @ExceptionHandler 注解和方法参数来定义需要处理的异常类型和异常处理逻辑。 7. Spring Boot 如何实现 AOP? Spring Boot 集成了 Spring Framework 的 AOP 功能,可以通过 @Aspect 和 @Around 注解来实现切面编程。在切面类中,可以定义需要拦截的方法和拦截逻辑,以实现日志记录、权限控制等功能。 8. Spring Boot 如何实现事务管理? Spring Boot 集成了 Spring Framework 的事务管理功能,可以通过 @Transactional 注解来实现事务控制。在需要进行事务控制的方法上添加 @Transactional 注解,即可开启事务。 9. Spring Boot 如何集成数据库? Spring Boot 支持多种数据库,包括 MySQL、Oracle、MongoDB 等,可以通过在 pom.xml 中添加相应的依赖库来实现数据库的集成。同时,Spring Boot 也提供了多种数据库访问方式,包括 JDBC、JPA、MyBatis 等,可以根据实际需求选择合适的方式。 10. Spring Boot 如何实现缓存? Spring Boot 集成了多种缓存框架,包括 Ehcache、Redis、Caffeine 等,可以通过在 pom.xml 中添加相应的依赖库来实现缓存功能。同时,Spring Boot 也提供了多种缓存注解,包括 @Cacheable、@CachePut、@CacheEvict 等,可以方便地实现缓存功能。 面试建议: - 对于 Spring Boot 的基本原理和使用方法要有深入了解,并能够熟练使用 Spring Boot 搭建项目。 - 对于 Spring Boot 中常用的注解和配置文件要熟练掌握。 - 对于 Spring Boot 中的高级功能(如自动配置、AOP、事务管理、缓存等)要有一定的了解,并能够根据实际需求进行应用。 - 在面试中要注意表达清楚自己的观点和思路,可以通过实际项目经验来证明自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值