Springboot

我是宋萌的萌阿 2019-04-18 09:55:59
Spring Boot运行原理 实际上Spring Boot并不是要替代Spring框架,我们知道在JDK1.5推出注解功能以后,Spring框架实现了大量的注解来替代原有的基于XML的配置,主要用于配置管理、Bean的注入以及AOP等相关功能的实现。然而,随着Spring注解的数量越来越多,并且被大量的使用,尤其是相同的多个注解会被大量重复地用到各个类或者方法中。这样就导致了繁琐的配置及大量冗余的代码。 到这里你也许就会想到既然这么多Spring注解很繁琐,那么可不可以将其组合一下呢?通过定义一些新的注解,将功能进行分类,不同的Spring注解通过新的注解定义进行一定的组合,这样对于大部分通用场景下,只需要引入一个新的注解,就自动包含了与之相关的其他Spring注解?没错!Spring Boot说到底就是这么个玩意! 但是,要实现注解的组合并不是简单的把多个注解牵强的叠加在一起,这里涉及到一些编程语言上的实现,例如要组合一个注解,那么该注解是否支持注解到别的注解上呢(略微有点拗口)?还有如果组合注解后,因为注解的背后还涉及到Spring容器上下文的初始化以及Bean注入相关的逻辑,如果一个A注解涉及的Bean,涉及到另外一个B注解涉及到的Bean的初始化;也就意味着A注解的Bean初始化,需要在B注解的Bean初始化完成后才能进行注入,否则就会导致Bean依赖注入的失败。 Spring Boot框架本质上就是通过组合注解的方式实现了诸多Spring注解的组合,从而极大地简化了Spring框架本身的繁琐配置,实现快速的集成和开发。只是要这样实现,也需要一定的基础条件! 元注解 说到底Spring Boot框架是在Spring框架的基础上做了一层二次封装,最重要的特点就是Spring Boot框架定义了一些新的注解来实行一些Spring注解的组合,而Spring注解则是基于JDK1.5+后的注解功能的支持来完成的。 关于JDK的注解如果想要注解到别的注解上,就需要将其定义为元注解,所谓的元注解,就是可以注解到其他注解上的注解,被注解的注解就是我们上面说到的组合注解。而Spring框架的很多注解都是可以作为元注解的,并且Spring框架本身也实现了很多组合注解,例如我们常用的@Configuration就是一个这样的组合注解。因此,有了这样一个条件Spring Boot的实现才有了基础条件! 条件注解@Conditional Spring 4提供了一个通用的基于条件的注解@Conditional。该注解可以根据满足某一个特定条件与否来决定是否创建某个特定的Bean,例如,某个依赖包jar在一个类路径的时候,自动配置一个或多个Bean时,可以通过@Conditional注解来实现只有某个Bean被创建时才会创建另外一个Bean,这样就可以依据特定的条件来控制Bean的创建行为,这样的话我们就可以利用这样一个特性来实现一些自动的配置。 而这一点对于Spring Boot实现自动配置来说是一个核心的基础能力,从本质上来说Spring Boot之所以可以实现自动注解配置很大程度上也是基于这一能力。在Spring Boot中以@Conditional为元注解又重新定义了一组针对不同场景的组合条件注解,它们分别是: @ConditionalOnBean:当容器中有指定Bean的条件下进行实例化。 @ConditionalOnMissingBean:当容器里没有指定Bean的条件下进行实例化。 @ConditionalOnClass:当classpath类路径下有指定类的条件下进行实例化。 @ConditionalOnMissingClass:当类路径下没有指定类的条件下进行实例化。 @ConditionalOnWebApplication:当项目是一个Web项目时进行实例化。 @ConditionalOnNotWebApplication:当项目不是一个Web项目时进行实例化。 @ConditionalOnProperty:当指定的属性有指定的值时进行实例化。 @ConditionalOnExpression:基于SpEL表达式的条件判断。 @ConditionalOnJava:当JVM版本为指定的版本范围时触发实例化。 @ConditionalOnResource:当类路径下有指定的资源时触发实例化。 @ConditionalOnJndi:在JNDI存在的条件下触发实例化。 @ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者有多个但是指定了首选的Bean时触发实例化。
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
健硕的马夫 2019-04-21
  • 打赏
  • 举报
回复
hookee 2019-04-19
  • 打赏
  • 举报
回复

10,608

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧