2016-12-05 54 views
1

我目前正在學習春季的繩索。
我試圖自動裝配方法的參數,像這樣:...是沒有存取方法

@RequestMapping("/hello") 
public String something(@Autowire AnInterface ai) { 
    ai.doSomething(); 
    return "/"; 
} 

用下面的接口和類:

@Component 
public interface AnInterface { 
    void doSomething(); 
} 

@Component 
public class Implementation implements AnInterface { 
    @Autowired private AnotherInterface ai; 

    public Implementation() { ; } 

    public Implementation(AnotherInterface ai) { 
     this.ai = ai; 
    } 

    public void setAi(AnotherInterface ai) { 
     this.ai = ai; 
    } 

    @Override 
    public void doSomething() { 
     System.out.println(ai.hello()); 

    } 
} 

@Component 
public interface AnotherInterface { 
    String hello(); 
} 

@Component 
public class AnotherImplementation implements AnotherInterface { 

    @Override 
    public String hello() { 
     return "hello"; 
    } 

} 

但是,調用控制器的方法時,我得到一個IllegalArgumentException
Invoked method public abstract void AnInterface.doSomething() is no accessor method!

我在做什麼錯?

感謝提前:)

+0

你運行該代碼?我認爲它會產生編譯時錯誤。 – SachinSarawgi

+0

是的,它適用於我。 但是,我可能在複製代碼時發生錯誤。 你會得到什麼錯誤? – portux

回答

2

不能自動裝配組件的方法,試試這個:

@Autowire AnInterface ai; 

@RequestMapping("/hello") 
public String something() { 
    ai.doSomething(); 
    return "/"; 
} 
+0

好的,這工作。謝謝! 這可能有點不合時宜,但爲什麼呢? – portux

+0

@rbgm,spring beans在應用程序啓動時初始化,該方法將在應用程序運行時調用,在那個時候,它已經太遲了。 – Jaiwo99