2015-08-20 19 views
1

我在Spring中很新,我對如何向控制器類注入某些類存在一些疑問。如何將這些類注入到我的Spring控制器類中?

到我的項目我有這個的HomeController類:

@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 
    @Autowired 
    private MessageSource messageSource; 
    @Autowired 
    private Environment env; 

    ..................................................... 
    ..................................................... 
    ..................................................... 
} 

我的疑問是關係到2個對象的MessageSource爲messageSource環境Env類。

正如您所看到的,這些類是由@Autowired註釋注入的。

問題是我沒有將bean定義插入到這些類的XML配置中。那麼爲什麼正確注入?這些bean的定義在哪裏?

TNX

+2

請發佈你的xml配置和bean定義(我很確定他們正在用註釋定義自己) – VLef

+0

你能顯示導入語句嗎? – Jens

+2

Bean不僅可以在xml中定義,而且可以使用註釋,例如「@ Service」。如果容器找到與給定的類或接口相匹配的容器,它會正確注入它。 –

回答

1

豆的自動發現是基於以下規則:

1)使用情境:註解的配置標籤春-config.xml中讓 春季使用註解
2)使用上下文: spring-config中的組件掃描標籤。xml和告訴Spring包在其中尋找 自動發現豆
3)使用@Component註釋標記一個類 作爲春天的自動發現豆

如果@Component annotation被使用,那麼這個bean聲明不需要在spring-config.xml中聲明

1

春映射可以用XMLannotations來完成。

在你的情況,如果沒有XML定義,您MessageSourceEnvironment類應該由Spring annotations@Component@Service@Resource映射:

@Component

指示的一個nnotated類一個「組件」。當使用基於註釋的配置和類路徑掃描時,這些類被認爲是自動檢測的候選

@Autowired

@Autowired註解將試圖找到Foo類型的Spring上下文一個bean,然後將注入相同。

@Resource

這種類似的@Resource註釋將嘗試找到一個名爲 「foo」 的豆。總而言之,按類型@Autowired線和@Resource按名稱連線。

0

EnvironmentMessageSource都與Spring框架的內部工作密切相關。

環境是應用程序上下文的一部分,可用於自動裝配。

ApplicationContext接口擴展了MessageSource接口,並且可用於自動裝配作爲消息源,即使您尚未定義自己的消息源Bean。 (如果你定義了你自己的消息源,應用上下文將會是delegate to that

相關問題