通过限定符注入null而不是对象的春季注入



这个简单的代码应该通过JavaSpring实现一个简单的工厂。然而,结果是null指针,因为Human对象没有被注入对象(因此它保持为null(。

我做错了什么?

感谢

配置

@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不启用字段的自动布线
指定为:

此注释可以在字段或参数上用作自动布线时的候选bean

所以这些:

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

应该是:

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

最新更新