这个简单的代码应该通过Java实现一个朴素的工厂。但是,结果是null指针,因为Human没有被注入对象(因此它保持为空)。
我做错什么了?
谢谢
配置
@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;
}
}
人工厂,这是类朴素的工厂设计模式与弹簧的实现。
@Service
public class HumanFactory {
@Qualifier("Male")
Human Male;
@Qualifier("Female")
Human female;
public Human getMale() {
return Male;
}
public Human getFemale() {
return female;
}
Main
@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());
}
}
发布于 2018-07-14 08:34:37
@Qualifier
不支持字段的自动装配。
该条规定如下:
此注释可在字段或参数上用作自动装配时候选bean的限定符。
因此,这些:
@Qualifier("Male")
Human Male;
@Qualifier("Female")
Human female;
应:
@Autowired
@Qualifier("Male")
Human Male;
@Autowired
@Qualifier("Female")
Human female;
https://stackoverflow.com/questions/51341206
复制相似问题