2017-09-21 64 views
2

以下代碼片段適用於Spring Boot 1.5.7應用程序。允許在Spring Boot應用程序中使用@Autowired在哪些類中?

@Controller 
public class MainController { 

    @Autowired 
    private EventtypeRepository eventtypeRepository; 

    private BetfairFacade client = new BetfairFacade(); 

    @GetMapping(path="/update") 
    public @ResponseBody int updateBetfair() { 
     return client.updateBetfair(eventtypeRepository); 
    } 

} 



public class BetfairFacade { 

public BetfairFacade() { 
} 

public int updateBetfair(EventtypeRepository eventtypeRepository) { 
    int out = 0; 

    Eventtype bfT = new Eventtype(); 
    bfT.setEventtype("foo"); 
    bfT.setName("bar"); 
    eventtypeRepository.save(bfT); 

    return out; 
    } 

} 

下面的代碼片段不起作用,因爲當我嘗試在BetfairFacade實例eventtypeRepository領域仍然null

@Controller 
public class MainController { 

    private BetfairFacade client = new BetfairFacade(); 

    @GetMapping(path="/update") 
    public @ResponseBody int updateBetfair() { 
     return client.updateBetfair(); 
    } 

} 



@Component 
public class BetfairFacade { 

    @Autowired 
    public EventtypeRepository eventtypeRepository; 


    public BetfairFacade() { 
    } 

    public int updateBetfair() { 
    int out = 0; 

    Eventtype bfT = new Eventtype(); 
    bfT.setEventtype("foo"); 
    bfT.setName("bar"); 
    eventtypeRepository.save(bfT); 

    return out; 
    } 

} 

爲什麼不能正常工作?如果可以的話,是否有可能實現這個目標?

+0

我實際上讀過這個問題及其答案,但並沒有像我在這裏收到的非常精確的自定義答案那樣幫助我。 –

回答

3

您必須爲@AutowireBetfairFacade才能使存儲庫注入工作。如果像你一樣手動實例化,spring將不會將其視爲託管bean。

@Controller 
public class MainController { 

    @Autowire 
    private BetfairFacade client; 
+0

這就是我在這兩個例子中所做的,所以這個答案並沒有真正的幫助。 –

+0

Betfairfacade不是庫類,你確定嗎? –

+0

不,'BetfairFacade'由'new'創建,不是Spring注入的。當用'new'創建時,它只是普通的對象實例化,而Spring與它無關,所以它裏面的註釋都被忽略。 – amorfis

相關問題