[英]How are injected these classes into my Spring controller class?
我在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和Environment env類有關。
如您所見,這些類是通過@Autowired注釋注入的。
問題是我沒有為這些類在XML配置中定義bean。 那么為什么要正確注射呢? 這些bean的定義在哪里?
TNX
Spring映射可以使用XML
或注釋來完成。
在您的情況下,如果未定義XML,則應使用Spring批注(如@Component
@Service
或@Resource
映射您的MessageSource
和Environment
類:
指示帶注釋的類是 “組件”。 當使用基於注釋的配置和類路徑掃描時,此類會被視為自動檢測的候選 。
@Autowired
@Autowired注解將嘗試在春季上下文中找到Foo類型的bean,然后將其注入。
@Resource
與此類似的是@Resource批注,它將嘗試查找名稱為“ foo”的bean。 總而言之,@ Autowired導線按類型,@ Resource導線按名稱。
Bean的自動發現基於以下規則:
1)在spring-config.xml中使用context:annotation-config標簽讓Spring使用Annotations
2)在spring-config.xml中使用context:component-scan標記,並告訴Spring在其中尋找自動發現bean的包
3)使用@Component批注將類標記為Spring自動發現的bean
如果使用@Component annotation
,則不需要在spring-config.xml中聲明Bean聲明。
Environment和MessageSource都與Spring Framework的內部工作緊密相關。
該環境是應用程序上下文的一部分,將可用於自動裝配。
ApplicationContext接口擴展了MessageSource接口,即使您尚未定義自己的消息源Bean,也可以將其作為消息源進行自動裝配。 (如果您定義自己的消息源,則應用程序上下文將委托給該消息源)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.