SpringBoot配置两个一样的Bean,区分两个配置类

发布时间 2023-05-17 14:15:27作者: C_C_菜园

1、@Primary

作用:

  • 指定默认bean。
  • 当没有根据名字显示要注入哪个bean的时候,默认使用打了@Primary标签的bean

2、配置两个一样的bean

@Configuration
public class MyThymeLeafConfig {

    @Resource
    private ApplicationContext applicationContext;

    /** 自定义的bean(默认)
     * @return SpringTemplateEngine
     * @Primary :<li>作用:指定使用名为“myTemplateEngine”的bean作为默认bean。</li>
     *          <li>这样,当您在需要使用SpringTemplateEngine的地方没有指定@Qualifier注释时,Spring将使用该默认bean。</li>
     *          <li>使用@Resource时,可直接设置名字。不用使用@Qualifier注释</li>
     */
    @Bean(name = "myTemplateEngine")
    @Primary
    public SpringTemplateEngine myTemplateEngine(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

//----------------------------------------------

    /** 自定义的bean2
     * @return SpringTemplateEngine
     */
    @Bean(name = "myTemplateEngine2")
    public SpringTemplateEngine myTemplateEngine2(){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

}

3、使用

  • 可以使用 @Resource 也可以使用 @Autowired + @Qualifier
  • 推荐使用 @Resource
  • @Resource和@Autowired + @Qualifier区别见: