设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 综合聚焦 > 编程要点 > 正文

谈谈SpringBoot自动装配的魔力

发布时间:2021-11-19 10:15 所属栏目:13 来源:互联网
导读:
导读:目录 一、 springBoot自动配置的好处1、 回想一下当你在使用spring来搭建一个项目的时候2、这时我们会有一个疑问二、@Conditional注解相关介绍1、@Conditional小demo三、自定义一个条件配置类/springBoot自定义注解1、简单解释@Condition注解家族2、自定义条
目录
一、 springBoot自动配置的好处1、 回想一下当你在使用spring来搭建一个项目的时候2、这时我们会有一个疑问二、@Conditional注解相关介绍1、@Conditional小demo三、自定义一个条件配置类/springBoot自定义注解1、简单解释@Condition注解家族2、自定义条件注解
一、 springBoot自动配置的好处
1、 回想一下当你在使用spring来搭建一个项目的时候
你需要编写很多的有关spring的xml。例如读取属性配置的bean、数据源bean、事务管理工厂bean、mybatis与spring整个的bean等等。再次利用该框架搭建项目的时候,又是周而复始的操作。
 
但是现在当你使用springBoot搭建项目的时候,你会发现所有的配置你都不用去编写就可以帮你去实现(仅仅需要在连接外部数据库的时候需要进行配置,其实如果使用内嵌数据库h2 则你完全不必需要application.properties配置文件)。
 
你可以在你的具体的业务代码中使用@AutoWried @Resource注解将数据源,事务工厂等注入到业务层,像是你自己配置那样。
 
2、这时我们会有一个疑问
springBoot到底做了什么让我们可以不用配置,而使用那些功能对象。
 
其实springBoot使用基于条件的自动注入原理,即为当满足某个条件的时候,spring会实例化该注解对应的bean,将其放入到Srping上下文中,让你可以轻松的使用。SpringBoot实现条件配置离不开它的核心组件@Conditional。
 
下面我们慢慢的来揭开springBoot自动配置的神秘面纱。
 
二、@Conditional注解相关介绍
1、@Conditional小demo
@Conditional 是个什么鬼,不解释来个小的demo大致了解一下
 
描述一下demo场景 :Life实体bean在特定条件(@Conditional)下,被springBoot初始化,并放置到spring上下文环境中。
 
1.1、 Life 实体类
 
/**
 * 梦想存在,生命才有意义
 */
public class Life {
    //工作
    private String work;
    //学习
    private String study
    //爱
    private String love;
 
  //省略seter /geter
 
}
1.2、 编写我们自己的条件匹配规则
 
/**
 * 实现ConfigurationCondition(该接口继承了Condition)
 */
public class MyTestConditional implements ConfigurationCondition {
    /**
     * 设置使用该类进行解析的时机
     * 1、REGISTER_BEAN:会在注册Bean的时候进行condition的解析
     *  即为在对应的@Bean注解和@condition注解组合使用的时候 进行条件的判断
     *  @Bean注解对应spring 的xml的<bean/>标签
     * 2、PARSE_CONFIGURATION:会在解析@Configuration时进行condition的解析
     *    即为在对应的@Configuration注解和@condition注解组合使用的时候 进行条件的判断
     *    @Configuration注解对应spring 的xml的<beans/>标签
     * @return
     */
    @Override
    public ConfigurationPhase getConfigurationPhase() {
        return ConfigurationPhase.REGISTER_BEAN;
    }
    /**
     * 该方法为条件判断的核心 只有该方法返回为true 则表示其条件成立 ,执行相应的配置
     * @param conditionContext
     * @param annotatedTypeMetadata
     * @return
     */
    @Override
    public boolean matches(ConditionContext conditionContext,
    AnnotatedTypeMetadata annotatedTypeMetadata) {
              return false;  //表示验证不通过
    }
该类实现了ConfigurationCondition 有如下两个方法
 
1、 getConfigurationPhase() 该条件规则起作用的时候
 
2、 matches()条件匹配规则 这里为了演示不做具体的逻辑条件的处理
 
返回一个布尔值,如果为ture 则表示条件成立 配置生效
 
反之不生效。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读