美文网首页
Springboot 注解 @Autowired @Qual

Springboot 注解 @Autowired @Qual

作者: 学无止境吧 | 来源:发表于2020-08-05 14:02 被阅读0次

    @Autowired
    自动装配

    @Component("fooFormatter")
        public class FooFormatter implements Formatter {
            public String format() {
                return "foo";
            }
        }
    
        @Component("barFormatter")
        public class BarFormatter implements Formatter {
            public String format() {
                return "bar";
            }
        }
    
        @Component
        public class FooService {
            @Autowired
            private Formatter formatter;
            
            //todo 
        }
    

    上面的例子会抛出异常NoUniqueBeanDefinitionException,用@Qualifier注解指定

    @Component
        public class FooService {
            @Autowired
            @Qualifier("fooFormatter")
            private Formatter formatter;
            //todo 
        }
    

    也可以在 Formatter 实现类上使用 @Qualifier 注释,而不是在 @Component 或者 @Bean 中指定名称,也能达到相同的效果

    @Component
         @Qualifier("fooFormatter")
         public class FooFormatter implements Formatter {
             public String format() {
                 return "foo";
             }
         }
     
         @Component
         @Qualifier("barFormatter")
         public class BarFormatter implements Formatter {
             public String format() {
                 return "bar";
             }
         }
    

    @Primary 指定默认注入的bean消除歧义

    @Component
         @Primary
         public class FooFormatter implements Formatter {
             public String format() {
                 return "foo";
             }
         }
    
         @Component
         public class BarFormatter implements Formatter {
             public String format() {
                 return "bar";
             }
         }
    

    @Compent 作用就相当于 XML配置

    @Component
    @Data
    public class User{
        private String name = "tom";
    }
    

    备注:
    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type。

    Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

    如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

    注解一览
    @Autowired
    @Qualifier
    @Primary
    @Resource
    @Bean
    @Component
    @Service
    @Repository
    @Controller

    相关文章

      网友评论

          本文标题:Springboot 注解 @Autowired @Qual

          本文链接:https://www.haomeiwen.com/subject/wdlwrktx.html