原文地址:http://blog.longjiazuo.com/archives/1239
接下來準備對spring4.x的相關特性做一個總結和整理,會有一系列文章,歡迎大家閱讀,交流,討論。
Spring框架本身的四大原則:
(1) 使用POJO進行輕量級和最小侵入式開發。
(2) 通過依賴注入和基於接口編程實現鬆耦合。
(3) 通過AOP和默認習慣進行聲明式編程。
(4) 使用AOP和模板(template)減少模式化代碼。
Spring所有功能的設計和實現都是基於此四大原則的。
一. 依賴注入
1. 點睛
我們經常說的控制反轉(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組件,沒有明確的角色。
@Controller在展現層(MVC——>SpringMVC)使用。
@Service在業務邏輯層(service層)使用。
@Repository在數據訪問層(dao層)使用。
注入Bean的註解,一般情況下通用。
@Autowired:Spring提供的註解。
@Resource:JSR-250提供的註解。
@Inject:JSR-330提供的註解。
@Autowired,@Inject,@Resource可註解在set方法或者屬性上,我個人的習慣是註解在屬性上。
二.示例
1. 編寫功能類的Bean
代碼解釋:
① 使用@Service註解聲明當前FunctionService類是Spring容器管理的一個Bean。其中,使用@Component,@Service,@Repository和@Controller是等效的,可以根據自己的需要選用。
2. 使用功能類的Bean
代碼解釋:
① 使用@Service註解聲明當前UseFunctionService類是Spring容器管理的一個Bean。
②使用@Autowired將FunctionService的實體Bean注入到UseFunctionService 中,讓UseFunctionService具備FunctionService的功能,此處使用JSR-330的@Inject註解或者JSR-250的@Resource註解是等效的。
3. 配置類
代碼解釋:
①@Configuration聲明當前類是一個配置類。
②使用@ComponentScan註解將會自動掃描包名下所有使用@Service,@Component,@Repository和@Controller
的類,並註冊為Bean。
4. 運行
代碼解釋:
① 使用AnnotationConfigApplicationContext作為Spring容器,接受輸入一個配置類作為參數。
② 獲得聲明配置的UseFunctionService的Bean。
運行結果如下所示: