概念
如果大家正在尋找一個java的學習環境,或者在開發中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節約學習時間,減少很多在學習中遇到的難題。
Spring是一個開源的輕量級框架,他的核心主要有兩部分組成IOC控制反轉和AOP面向切面編程。無論是IOC還是AOP,都是基於動態代理實現的。
IOC(Inverse of Contro)控制反轉: 有時候也被稱爲DI依賴注入,它是一種降低對象耦合關係的一種設計思想。
- Spring 中,Bean是被實例的,組裝的及被Spring 容器管理的Java對象;
- 所謂控制反轉就是應用本身不負責依賴對象的創建及維護,依賴對象的創建及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂的反轉;
- 所謂依賴注入就是指:在運行期,由外部容器動態地將依賴對象注入到組件中。
- 通過IOC容器,開發人員不需要關注對象是如何創建的,同時增加新類也非常方便,只需要修改配置文件即可實現對象的熱插拔;
- 對象是通過反射機制實例化出來的,因此對系統的性能有一定的影響,而且創建對象的流程變得複雜。
AOP((Aspect-OrientedProgramming)面向切面編程: 面向對象開發的一種補充,它允許開發人員在不改變原來模型的以滿足新的需求,例如,開發人員可以在不改變原來業務邏輯模型的基礎可以進行動態的增加日誌,安全或異常處理功能。
- 基於動態代理,在代理對象執行方法前/後增加自定義的功能;
- 比如記錄日誌功能,首先定義切面,Spring根據切面,在執行切面前/後可以獲取到輸入參數、返回值,作爲日誌記錄的依據;
- Spring的AOP是IOC的基礎上才能實現的,擁有bean的代理權,才能在bean執行前後做切面。
bean注入方式
Spring注入bean的方式有三種:
- 通過配置文件注入,如:
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
<property name="userDao" ref="userDaoMyBatis"></property>
</bean>
- 通過@Autowired注入,spring註解,默認是以byType的方式去匹配與屬性名相同的bean的id,如果沒有找到,就通過byName的方式去查找,使用@Qualifier註解(spring註解)指定某個具體名稱的bean,如:
@Autowired
@Qualifier("userDaoJdbc")
private IUserDao userDao;
- 通過@Resource注入,java的註解,默認以byName的方式去匹配與屬性名相同的bean的id,如果沒有找到就會以byType的方式查找,如:
@Resource("userDaoMyBatis")
private IUserDao userDao;
@Autowired和@Resource都可以實現Spring的bean注入,@Autowired是Spring的註解,@Resource是java的註解,如果以byName方式注入,@Resource相當於@Autowired + @Qualifier。