控制反轉(Inversion of Control,縮寫爲IoC),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。其中最多見的方式叫作依賴注入(Dependency Injection,簡稱DI),還有一種方式叫「依賴查找」(Dependency Lookup)java
在平常程序開發過程中,咱們推薦面向抽象編程,面向抽象編程會產生類的依賴,固然若是你夠強大能夠本身寫一個管理的容器,可是既然spring以及實現了,而且spring如此優秀,咱們僅僅須要學習spring框架即可。 當咱們有了一個管理對象的容器以後,類的產生過程也交給了容器,至於咱們本身的app則能夠不須要去關係這些對象的產生了。git
爲何要把類生產的過程交給容器:有利於作一些通用的代碼抽離,能夠類比一下 代理設計模式github
雖然下面即將說到3種配置方式,但原理上,SpringIOC只有2中注入方法:基於setter注入、基於構造器注入。而所謂的3種配置方式(編程風格)只是不一樣的配置手段罷了。spring
This is indexService function.
This is injectedString: 445566ddeeff
This is index dao
複製代碼
<bean id="indexService" class="cn.zephyr.IndexServiceImpl" >
<constructor-arg name="indexDao" ref="indexDao"/>
<constructor-arg name="injectedString" value="112233aabbcc"/>
</bean>
<bean id="indexDao" class="cn.zephyr.IndexDao"/>
複製代碼
IndexServiceImpl
添加全參、無參構造器的lombok註解@Data
@AllArgsConstructor
@NoArgsConstructor
public class IndexServiceImpl implements IndexService {
...
}
複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
...
</beans>
</xml>
複製代碼
<bean id="indexService" class="cn.zephyr.IndexServiceImpl" p:indexDao-ref="indexDao" p:injectedString="445566ddeeff"/>
複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
...
</beans>
</xml>
複製代碼
<bean id="indexService" class="cn.zephyr.IndexServiceImpl" c:indexDao-ref="indexDao" c:injectedString="445566ddeeff">/>
複製代碼
基於註解的方式能夠說是極大的減輕了配置工做,使得咱們可以更加專一於業務代碼編寫:編程
基於java config的方式,我的以爲讓咱們從繁瑣的xml配置解放出來,使用java config能夠提升代碼可讀性,減小出錯: 主要業務代碼以下(再也不使用spring.xml,使用SpringConfig.java
取代),執行後能夠看到一樣的效果:
設計模式