@Autowired在spring启动web项目中失败



我有一个简单的Spring Boot web项目,直接从模板:

@SpringBootApplication
@RestController
public class HelloWorldRestApplication {
public static void main(String[] args) {
    SpringApplication.run(HelloWorldRestApplication.class, args);
    Performer p = new Performer();
    p.perform();
    }
}

我有一个测试来确保自动装配工作,事实上它在这个测试类(示例来自Spring in Action, 4th):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired
private CDPlayer cdp;
@Test
public void cdShouldNotBeNull(){
    assertNotNull(cdp);
    }
}

:

public class Performer {
@Autowired
private CDPlayer cdp;
public void perform(){
    System.out.println(cdp);
    cdp.play();
}
public CDPlayer getCdp() {
    return cdp;
}
public void setCdp(CDPlayer cdp) {
    this.cdp = cdp;
}
}

:

@Component
public class CDPlayer{
public void play(){
     System.out.println("play");
  }
}
配置:

 @Configuration
 @ComponentScan
 public class CDPlayerConfig {
 }

然而,它不工作在HelloWorldRestApplication,我得到null。

添加@ContextConfiguration(classes=CDPlayerConfig.class)没有帮助。

我错过了什么?

尝试在主类中启用@ComponentScan,并从ApplicationContext中获得Performer类实例,如下所示:

@SpringBootApplication
@RestController
@ComponentScan({“package.name.1”,”package.name.2”})
public class HelloWorldRestApplication {
public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(HelloWorldRestApplication.class, args);
    Performer p = ctx.getBean(Performer.class);//get the bean by type                      
    p.perform();
    }
}

最新更新