<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### Spring框架 Spring有春天、彈簧、跳躍和泉眼的意思。Spring是一個開源的框架,是為了解決企業應用程序開發復雜性由RodJohnson創建的。雖然Spring是為企業級應用推出的,但是所有的java系統開發都可以使用Spring,包括桌面應用程序和企業級Web應用。Spring總不是憑空而出現的,任何框架也是,前面我們所說的struts和hibernate都有他出現的原因,以及是哪些問題促使了人們開發出新的框架。那為什么使用Spring框架呢? ### 從抽象工廠開始說起 曾近我們在Dao層為了解決更換數據庫的難題,我們自己動手寫工廠,讓工廠去創建從而在客戶端調用時隱藏了具體的創建細節,這樣我們就可以更換數據庫了。在Service層也同樣是可以用到抽象工廠,為了適應用戶需求變動,我們在sevice層應用抽象工廠,讓web調用只調用接口,具體創建放到工廠里,這樣我們就可以通過更換不同的.class文件來更換不同的業務實現。下面我們就簡單的通過一個程序來說明。 Dao層 UserDao接口代碼如下所示。 ~~~ public interface UserDao { public void addUser(String username,String password); } Dao層UserDao實現UserDaoMySqlImpl.java public class UserDao4MySqlImpl implements UserDao { @Override public void addUser(String username, String password) { System.out.println("UserDao4MySqlImpl.addUser()"); } } ~~~ Dao層UserDao實現UserDaoOracleImpl.java ~~~ public class UserDao4OracleImpl implements UserDao { @Override public void addUser(String username, String password) { System.out.println("UserDao4OracleImpl.addUser()"); } } ~~~ 這樣我們創建了Dao層的接口,并且給出了對于不同數據庫驅動的不同實現。 業務邏輯層manager(在這里先不引入工廠) Manager層接口UserManager.java ~~~ public interface UserManager { public void addUser(Stringusername,String password); } ~~~ Manager層實現UserManagerImpl.java ~~~ public class UserManagerImpl implements UserManager { @Override public void addUser(String username, String password) { //服務(對象)定位,由我們的應用程序負責服務(對象)定位.//主動 //UserDao userDao = new UserDao4MySqlImpl(); //如果想要換實現,就要可以換了. UserDao userDao = new UserDao4OracleImpl(); userDao.addUser(username,password); } } ~~~ 在這里尚且沒有使用抽象工廠+配置文件,來看我們的客戶端調用。 ~~~ public class client { /** * @param args */ public static void main(String[] args) { //TODO Auto-generated method stub //服務(對象)定位,由我們的應用程序負責服務(對象)定位. //因為自己產生了主動的查找.所以必須依賴,并且寫死. UserManager userManager = new UserManagerImpl(); userManager.addUser("張三","123"); } } ~~~ 我們如果要更換數據庫需要打開UserManagerImpl類去更改不同的實現,同樣在client調用如果要更改不同的業務也需要不同的UserManager實現。即便我們加上抽象工廠+配置文件同樣同樣需要在界面調service層使用和在調用Dao層使用,讓程序變的更加復雜,每個項目都要去寫,多個項目也是如此,當業務邏輯復雜的時候,我們就需要些多個工廠去創建不同的產品,并且在使用工廠的時候還要注意每次創建保證一個實例,這所有的一切一切,即便是工廠都是我們程序員手動去寫的,這樣就比較重復了,是我們去管理這些類,為什么不讓機器去管理呢? 所以Spring應運而生,Spring封裝了更多的重復和復雜,不但封裝了工廠,并且封裝了創建時出現的線程安全問題,Spring可以管理Connection,在使用hibernate的時候我們需要管理session,一線程一session,session連接我們lazy的有效期,spring提供一個Filter,我們不用再管理session的創建和銷毀,spring幫我們去管理了。 ### 下面大概了解一下Spring中將會時常提起的一些名詞。 簡單的來說,Spring是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架。 **輕量級**:大小與開銷方面而言Spring是輕量的。 **非侵入式**:Spring應用中的對象不依賴于Spring的特定類。 **控制反轉**:Spring通過一種稱為控制反轉(IOC)的技術促進了松耦合。當應用了IOC一個對象依賴的其他對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。 **切面編程**:Spring提供了切面編程的豐富支持,允許分離應用的業務邏輯與服務。 **容器**:Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建—一個可配置的原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例,以及它們是如何關聯的。 **框架**:Spring可以將簡單的組件配置,組成為復雜的應用,在Spring中應用對象被聲明式組合,典型地是在一個XML文件里,Spring提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了我們。 大概知道這些名詞吧,后續的文章會應用實例詳細的說明Spring的功能。 下篇我們將把上述的例子用Spring來實現,從而對比出Spring的IOC強大之處。
                  <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>

                              哎呀哎呀视频在线观看