<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                spring是一個輕量級的容器框架,主要是為了使企業的開發變得簡單、高效。無論是從大小還是開銷來講,他都可以算是輕量級的,也是非侵入性的。 下圖是spring的框架示意圖,說到spring,就不得不提他的控制反轉(IOC,Inversion of Control)。 ![](https://box.kancloud.cn/2016-04-27_57206b06140e9.jpg) 那么他的控制反轉是如何實現的呢? **控制反轉一般有兩種類型,依賴注入(DI)和依賴查找。依賴注入應用比較廣泛。** 首先來看,如果沒有使用spring,我們的一般操作是怎樣的。 client,dao和manager三個包,其中client為客戶端調用,UserDao和UserManager為接口。 ![](https://box.kancloud.cn/2016-04-27_57206b062e0f3.jpg) ~~~ /* * mysql的實現類 */ public class UserDao4MySqlImpl implements UserDao { //添加用戶 public void addUser(String username, String password) { System.out.println("UserDao4MySqlImpl.addUser()"); } } /* * oracle的實現類 */ public class UserDao4OracleImpl implements UserDao { //添加用戶 public void addUser(String username, String password) { System.out.println("UserDao4OracleImpl.addUser()"); } } ~~~ 業務層的實現類 ~~~ public class UserManagerImpl implements UserManager { @Override public void addUser(String username, String password) { // 由我們的應用程序負責服務(對象)定位 //如果不使用mysql數據庫,就需要修改該類的方法實現 // UserDao userDao = new UserDao4MySqlImpl(); UserDao userDao = new UserDao4OracleImpl(); userDao.addUser(username, password); } } ~~~ 客戶端調用方法: ~~~ public class Client { public static void main(String[] args) { // 由我們的應用程序負責服務(對象)定位 UserManager userManager = new UserManagerImpl(); userManager.addUser("張三", "123"); } } ~~~ ? ? ? 我們知道對象的創建過程,如果需求有變,可以進行更換。盡管可以進行修改,但始終是應用程序來管理對象之間的依賴關系,而spring的控制反轉,將這個操作交給容器管理。 ? ? ? DI(Dependency Injection) ? ? ? 這里說兩種DI注入的方式:setter注入和構造方法注入。 ? ? ? ?1)setter注入 ? ? ? 我們還是舉上面的例子,dao包中的內容都不需要改變,我們只需要將manager包中進行調整即可。如在UserManagerImpl類中,注入UserDao。 ~~~ public class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } .... <span style="font-size:18px;">}</span> ~~~ 配置文件 ~~~ <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="userDao4Mysql" class="com.spring.dao.UserDao4MySqlImpl"/> <bean id="usrDao4Oracle" class="com.spring.dao.UserDao4OracleImpl"/> <bean id="userManager" class="com.spring.manager.UserManagerImpl"> <!--使用setter方法注入--> <property name="userDao" ref="usrDao4Oracle"/> </bean> </beans> ~~~ 2)構造方法注入 ~~~ public class UserManagerImpl implements UserManager { private UserDao userDao; //構造方法 public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } ... } ~~~ 將配置文件中的userManager的bean進行修改 ~~~ <bean id="userManager" class="com.spring.manager.UserManagerImpl"> <!-- <constructor-arg ref="userDao4Mysql"/> --> <!-- 使用構造函數 --> <constructor-arg ref="usrDao4Oracle"/> </bean> ~~~ 當然,DI還有其他的實現方式,在這里就不介紹了,跟這兩種都很類似。 小結: 通過控制反轉,我們將類與類之間的關系,對象的生成放到了配置文件中,這樣既在一定程度上實現了解耦,也使得改變更加容易。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看