这个简单的代码应该通过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());
}
}
答案 0 :(得分:2)
@Qualifier
未启用字段的自动装配。
它指定为:
此注释可以在字段或参数上用作限定符 自动装配时选择候选豆
这些:
@Qualifier("Male")
Human Male;
@Qualifier("Female")
Human female;
应为:
@Autowired
@Qualifier("Male")
Human Male;
@Autowired
@Qualifier("Female")
Human female;