我們經常說的控制翻轉(Inversion of Control,IOC)和依賴注入(dependency injection,DI)在Spring環境下是等同的概念,控制翻轉是通過依賴注入實現的。所謂的依賴注入指的是容器負責創建對象和維護對象間的依賴關係,而不是通過對象本身負責自己的創建和解決自己的依賴。
依賴注入的主要目的是爲了解耦,體現了一種“組合”的理念。如果你希望你的類具備某項功能的時候,是繼承自一個具有此功能的父類好呢?還是組合另外一個具有這個功能的類好呢?答案是不言而喻的,繼承一個父類,子類將與父類耦合,組合另外一個類則使耦合度大大降低。
Spring Ioc容器(ApplicationContext)負責創建Bean,並通過容器將功能類Bean注入到你需要的Bean中。Spring提供使用xml、註解、Java配置、groovy配置實現Bean的創建和注入。
無論是xml配置、註解配置還是Java配置,都被稱爲配置元數據,所謂元數據即描述數據的數據。元數據本身不具備任何可執行的能力,只能通過外界代碼來對這些元數據進行解析進行一些有意義的操作。Spring容器解析這些配置元數據進行Bean初始化、配置和管理依賴。
聲明Bean的註解:
- @Component:組件,沒有明確的角色。
- @Service:在業務邏輯層(Service層)使用。
- @Repository:在數據訪問層(dao層)使用。
- @Controller:在展現層(MVC→Spring MVC)使用
注入Bean的註解,一般情況下通用:
- @Autowired:Spring提供的註解。
- @Inject:JSR-330提供的註解。
- @Resource:JSR-250提供的註解。
@Autowired、@Inject、@Resource可註解在set方法上或屬性上,但建議註解在屬性上,優點是代碼更少、層次更清晰。
參考:《Spring Boot實戰》