2017-09-18 140 views
0

我在spock框架中編寫了一個規範類。Spring @Autowired對象爲null

@ContextConfiguration(classes = [MyServiceImplementation.class]) 
    class MyServiceSpecification extends Specification { 

     @Autowired 
     private MyService myServiceImplementation 

     def " " { 
      //code 
     } 
    } 

MyServiceImplementation被標註@Service。我沒有使用XML配置。 MyServiceImpl是接口的實現:MyService

爲什麼自動佈線物件myServiceImplementation爲空?

我試過使用ComponentScan,它仍然沒有工作。

+0

聽起來你正在代碼中的某個地方做'new'MyServiceSpecification(或者Spock正在這樣做)! – MystyxMac

+0

它有任何解決方法嗎?我看不到這會如何影響該字段的空值 – Luca

+0

您是否使用Spock Spring模塊(http://spockframework.org/spock/docs/1.1/all_in_one.html#_spring_module)? – MystyxMac

回答

0

首先,您需要在類路徑上同時使用spock-corespock-spring。其次,@ContextConfiguration(classes=需要配置類的列表,而不是bean類。

@ContextConfiguration(classes = [MyConfig.class]) 
class MyServiceSpecification extends Specification { 

    @Autowired 
    private MyService myServiceImplementation 

    def " " { 
     //code 
    } 
} 

// You could also define @ComponentScan here 
class MyConfig { 
    @Bean 
    MyService myService() { 
     return new MyServiceImplementation(); 
    } 
} 
+0

我應用了所做的更改,併發揮了作用,謝謝解決方案 – Luca