gpt4 book ai didi

java - 通过 Qualifier 注入(inject) null 而不是对象进行 Spring 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 02:06:04 30 4
gpt4 key购买 nike

这个简单的代码应该通过 Java Spring 实现一个简单的工厂。然而结果是空指针,因为 Human 对象没有被注入(inject)对象(所以它保持空)。

我做错了什么?

谢谢

配置

@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());

}
}

最佳答案

@Qualifier 不会启用字段的 Autowiring 。
它被指定为:

This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring

所以这些:

@Qualifier("Male")
Human Male;

@Qualifier("Female")
Human female;

应该是:

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

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

关于java - 通过 Qualifier 注入(inject) null 而不是对象进行 Spring 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341206/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com