<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](http://blog.csdn.net/lovesummerforever/article/details/22500339)[的由來](http://blog.csdn.net/lovesummerforever/article/details/22500339),上篇中UserManager調用Dao的時候需要自己去實例化具體的Dao,或者通過工廠創建相應的Dao,最終還是客戶端自己去實例化具體的UserManager,UserManager自己去拿到工廠,工廠自己去創建相應的Dao。而Spring框架封裝了這創建過程,不再是我們自己手動去new,而是交給Spring的IOC容器去做這件事情,他自己(SpringIOC容器)會找,并且根據配置文件找到后new好直接傳遞給我們,不需要我們自己拿工廠去找去實例化。 ### 那什么是Spring的IOC容器呢? IOC(Inversionof Control),這個名詞就叫做控制反轉,控制反轉還有一個名字叫做依賴注入DI(Dependencyinjection)。上篇代碼中我們在UserManagerImpl中這樣調用Dao層,UserDaouserDao = new UserDaoOracleImpl();這樣使用接口編程可以增加代碼的穩定和健壯性等等,但是接口一定是需要實現的,遲早要執行這句代碼,這樣一來耦合關系就產生了。ManagerImpl類與UserDaoOracleImpl類就是依賴關系,當然我們可以使用工廠來創建Dao,如下圖所示。 ![](https://box.kancloud.cn/2016-06-21_576908fae7743.jpg) 圖2.1未使用工廠創建Dao ![](https://box.kancloud.cn/2016-06-21_576908fb19a3c.jpg) 圖2.2使用工廠來創建Dao 使用工廠表面上一定程度解決了以上的問題,但實質上代碼耦合沒有改變。而通過IOC容器可以徹底解決這種耦合,是把耦合的代碼移出去,放到統一的XML文件中,通過一個容器在需要的時候把依賴關系形成,即把需要的接口注入到需要的類中,這就是我們說的“依賴注入”的來源了。IOC容器有很多種,PicoContainer、JBoss、HiveMind、spring,在這里我們主要說的是Spring的IOC容器。 ### 下面是使用Spring IOC容器來控制,如下步驟所示。 1、導入Spring依賴包(因為在這里使用的是Spring的IOC,所以導入核心包就可以了) Spring_home/dist/spring.jar. 另外引入相關日志記錄包,兩個,spring-framework-2.0\lib\log4j\log4j-1.2.14.jar spring-framework-2.0\lib\jakarta-commons\commons-logging.jar 直接在UserLibraries中建立userlibraries然后再導入JARs,之后引入到我們的項目中。 2、提供配置文件applicationContext.xml,放到我們項目的src目錄下,我們可以拷貝Spring?spring-framework-2.0\samples\jpetstore\war\WEB-INF applicationContext.xml到我們的src目錄下。 3、提供log4j.propertiers配置文件。 4、在UserManagerImpl中提供構造方法或setter方法,讓Spring將UserDao與UserManagerImpl的關系注入(DI)進來。 5、讓Spring管理對象的創建和依賴,必須將依賴關系配置到Spring的核心配置文件中。 [在上一篇代碼中](http://blog.csdn.net/lovesummerforever/article/details/22500339),我們的Dao層代碼不變,我們的UserManagerImpl代碼如下所示。 ### UserManagerImpl.java ~~~ public class UserManagerImpl implements UserManager { //這樣改看不到具體的實現了. 但是在client調用時看到組裝的過程. private UserDao userDao; //構造方法進行賦值. // public UserManagerImpl(UserDao userDao) { // // this.userDao = userDao; // } // //通過setter方法來把依賴對象注入。 public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void addUser(String username, String password) { userDao.addUser(username, password); } } ~~~ Spring的依賴注入方法,我們可以通過賦值注入,也就是通過getter和setter方法來獲得和設置Bean的屬性值,我們一般使用這種方法。在Spring中每個對象在配置文件中,均以<bean>的形式出現,而子元素<property>則指明了使用這個JavaBean的setter方法來注入值,在<property>中,可以定義要配置的屬性以及要注入的值,可以將屬性注入任何類型的值,不僅是基本類型的java數據類型,也可以是Bean對象,在這就我們注入的就是Bean對象。 另一種是構造器的注入,不常使用,通過標簽<constructor-arg>來實例化這個Bean的時候需要注入的參數。 ### ApplicationContext.xml代碼如下所示。 ~~~ <?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: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.bjpowernode.spring.dao.UserDao4MySqlImpl"/> <bean id="userDao4Oracle" class="com.bjpowernode.spring.dao.UserDao4OracleImpl"/> <!-- userManager依賴于mysql的實現 --> <bean id="userManager" class="com.bjpowernode.spring.manager.UserManagerImpl"> <!-- <constructor-arg ref="userDao4MySql"/> --> <!-- <constructor-arg ref="UserDao4Oracle"/>--> <property name="userDao" ref="userDao4MySql"/> </bean> </beans> ~~~ 上面這個XML文件就是Spring中用來配置JavaBean的。通過這樣的一個方式可以把分散的JavaBean組裝一個整體系統,再去實現具體的業務了邏輯。完成了Bean的開發和裝配下一步就是要進行調用和測試了。 ### 在客戶端進行調用,代碼如下所示。 ~~~ public class client { public static void main(String[] args) { //spring中有BeanFactory,是一個接口. //專門讀取applicationContext.xml文件的實現. //ClassPathXmlApplicationContext類就是對BeanFactory接口的實現. //會把applicationContext.xml這個文件讀進來,并且創建對象. BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //產品標識. UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("張三", "123"); } } ~~~ 這樣就完成了用SpringIOC容器來解決依賴問題,不需要我們自己去建立工廠,我們只要聲明一個接口,具體的實現在配置文件中告訴SpringIOC容器,他會自己找到并進行創建相應的實例,然后傳遞給我們,本來是由我們自己去控制對象之間的依賴關系,現在由IOC來控制了,這就是控制反轉。這樣我們很輕松就了解了哦。 ![](https://box.kancloud.cn/2016-06-21_576908fb357a7.jpg) Spring coming.....
                  <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>

                              哎呀哎呀视频在线观看