通过Qualifier进行的弹簧注入会注入null而不是对象

时间:2018-07-14 16:15:54

标签: java spring dependency-injection

这个简单的代码应该通过Java Spring实现一个幼稚的工厂。 但是结果是空指针,因为没有向人类对象注入对象(因此它保持为空)。

我在做什么错了?

谢谢

配置

@Configuration
 public class Config {

    @Bean(name = "Male")
    public Human getMale(){
        return new Male();
    }
    @Bean(name = "Female")
    public Human getFemale(){
        return new Female();
    }
}

人类

@Service
public interface Human {
    String getName();
    void setName(String nm);
}

男性和女性实现

@Service
public class Female implements Human{

    private  String name;

    public Female() {
        this.name = "Alice";
    }
    public String getName() {
        return name;
    }
    public void setName(String nm) {
        this.name=nm;
    }

}

@Service
public class Male implements Human{

    private  String name;

    public Male() {
        this.name = "Bob";
    }
    public String getName() {
        return name;
    }
    public void setName(String nm) {
        this.name=nm;
    }

}

人类工厂 这是用Spring天真地实现工厂设计模式的类。

@Service
public class HumanFactory {

    @Qualifier("Male")
    Human Male;

    @Qualifier("Female")
    Human female;

    public Human getMale() {
        return Male;
    }

    public Human getFemale() {
        return female;
    }

主要

@SpringBootApplication
public class AotSpringMain {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(AotSpringMain.class, args);
        HumanFactory humanFactory = (HumanFactory)ctx.getBean("humanFactory");
        System.out.println(humanFactory.getMale().getName());

    }
}

1 个答案:

答案 0 :(得分:2)

@Qualifier未启用字段的自动装配。
它指定为:

  

此注释可以在字段或参数上用作限定符   自动装配时选择候选豆

这些:

@Qualifier("Male")
Human Male;

@Qualifier("Female")
Human female;

应为:

@Autowired
@Qualifier("Male")
Human Male;

@Autowired
@Qualifier("Female")
Human female;