• Spring走向注解驱动编程


    SpringFramework的两大核心,IOC(Inversion of control)控制反转和DI(Dependency Inject)依赖注入,其推崇的理念是应用系统不应以java代码的方式直接控制依赖关系,而是通过容器来管理。

    Spring Framework 1.x 注解驱动启蒙时代

    从Spring Framework 1.2.0版本开始,开始支持Annotation,虽然框架层面均已支持@managedResource和@Transactional等,但是其主要的还是以XML配置为准。

    Spring Framework 2.X 注解驱动过渡时代

    Spring Framework 2.0在Annotation支持方面添加了新的成员,@Required、数据相关的@Repository及AOP相关的@Aspect等,但同时提升了XML配置能力,即“可扩展的XML编写(Extensible XML authoring)”,当然的,这种扩展能力的出现,无形中为XML的配置增加了筹码。

    Spring Framework 2.5开始,引入了新的骨架式Annotation。

    • @Service
    • @Controller,@RequestMapping及@ModelAttribute

    Spring Framework 2.5还支持了JSR-250(Java规范)。

    @Resource注入

    @PostConstruct 替代<bean init-method=”…”/>

    @PreDestroy 替代<bean destroy-method=”…”/>

    尽管Spring Framework 2.X时代提供了为数不少的注解,然而编程的手段却不多,最主要的原因在于框架层面仍未“直接”提供驱动注解的Spring应用上下文,并且仍需要XML驱动,<context:annotation-config>和<context:component-scan>

    Spring Framework 3.x 注解驱动黄金时代

    Spring Framework3.x是一个里程碑式的时代,3.0除了提升Spring模式注解“派生”的层次性,首要任务是替换XML配置方式,引入配置类注解@Configuration,该注解是内建的@Component的“派生”注解,遗憾的是,3.0并没有引入<context:component-scan>的注解,而是选择过渡方案——@ImportResource和@Import。ImportResource负责导入遗留的XML配置文件,Import允许导入一个或多个类作为Spring Bean。

    3.0引入AnnotationConfigApplicationContext最为前时代ApplicationContext的替代者。3.1新引入注解@ComponentScan,替换XML的<context:component-scan>,成为全面进入注解驱动时代的一大步。

    SpringFramework3.x注解提升还体现在以下方面:

    • 定义声明中,@Bean允许使用注解@Role设置其角色
    • 使得Spring应用上下文具备条件化Bean定义的能力
    • 方面,@RequestHeader,@CookieVale和@RequestPart出现,使得不必使用Servlet API
    • 以及配置属性源抽象PropertySources,奠定了SpringBoot外部化配置的基础。
    • 配套的注解Caching和Cacheable极大简化数据缓存的开发。
    • 周期异步@Schedule及异步web请求DeferredResult

    Spring Framework 4.x 注解驱动完善时代

    3.1开始提供@Profile提供了配置化的条件组装,不过这方面还是比较单一的,4.0开始,引入条件化注解@Conditional,通过自定义Condition实现配合,弥补之前版本条件化装配的短板,4.0开始Profile反过来通过@conditional实现。

    Java8开始对提供@Repeatable,Framework4.0巧妙的兼容了JSR-310。根据特性,将@PropertySource、@ComponentScan提升为可重复使用的注解@PropertySources、@ComponentScans。

    4.2开始

    • 新增了事件监听器注解@EventListener,作为ApplicationListener接口编程的第二选择。
    • @AliasFor解除注解派生的时候冲突限制
    • 在浏览器跨域资源访问方面,引入@CrossOrigin,作为CorsRegistry替换注解方案。

    SpringFramework 5.x 注解驱动当下时代

    SpringFramework5.0作为Spring Boot 2.0的底层,注解驱动的性能提升不是那么明显。在SpringBoot应用场景中,大量使用@ComponentScan扫描,导致Spring模式的注解解析时间耗时越长,面对这个问题,5.0引入@Indexed,为Spring模式注解添加索引。

  • 相关阅读:
    正则表达式
    python最新版mplfinance中文乱码解决方法
    Python学习笔记:pandas.read_csv分块读取大文件(chunksize、iterator=True)
    pandas,读取或存储DataFrames的数据到mysql中
    BaoStock:使用python的baostock接口,查询季频盈利能力
    win10解决Mysql net start mysql启动,提示发生系统错误 5 拒绝访问
    mysql5.7 本地计算机上的mysql 服务启动后停止 的问题
    获取A股所有的股票代码
    phpcms <= v9.15 任意文件读取漏洞的分析和利用
    ubuntu系统安装搜狗法并设置不能切换的问题解决
  • 原文地址:https://www.cnblogs.com/yanyouqiang/p/10981365.html
Copyright © 2020-2023  润新知