2014-01-06 99 views
7

在Spring MVC的項目,我想注入@Controller到不同的豆,是這樣的:進樣@Controller到另一個春天豆

@Controller 
public class MyController { 
    .. 
} 

@Component 
public class SomeSpringBean { 
    @Resource 
    private MyController myController; 

    .. 
} 

這似乎並不工作,雖然@控制器註釋是@Component的一個特殊化,就像例如@Service(它工作):

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com..Mycontroller] is defined 

我也試着直接從ApplicationContext獲取bean。

我想避免我爲什麼要注入控制器的任何討論,我應該相當創建了一個抽象的追加等級和注入它,而不是:)

+1

該消息表示在定義了SomeSpringBean的Spring上下文中沒有MyController(兩個控制器都在Dispatcher Servlet上下文中(但這不可避免地導致討論:-))或者根本沒有自動掃描)。附:當你通過類型自動裝配時,即你知道它的類型是MyController,你應該使用'@ Autowired'或'@Inject'來代替'@ Resource'來按名稱連接bean - 使用「fall-返回「只針對Spring的」@ Resource「行爲。 –

回答

5

我會假設你SomeSpringBean類是由ContextLoaderListener加載的根上下文掃描的組件。

我打算假設您的@Controller帶註釋的類是由DispatcherServlet加載的servlet上下文掃描的。

在這種情況下,根上下文無權訪問servlet上下文中的bean。只有反過來是真的。

您需要將SomeSpringBean類放入其他必須由servlet上下文掃描的程序包中。


如果我的假設是錯誤的,請添加您的上下文配置。


這不是一個好主意。 @Controller豆意味着由DispatcherServletHandlerMapping堆棧管理。我想不出任何你想從@Controller bean獲得的東西。

+0

賓果!這是2個應用程序上下文。謝謝。至於我爲什麼要這麼做 - 控制器公開了REST服務,這些服務由外部客戶端使用。除此之外,我希望將相同服務的結果包含在不同的模型中。我必須以不同的方式去做。 –