Spring的簡單總結

1.spring
(1) 六大模塊

  • Spring Core spring的核心功能:核心容器的主要組件是BeanFactory,它是工廠模式的實現,它使用控制反轉(IOC)模式將應用程序的配置和依賴性規範與實際應用程序代碼分開。
  • Spring AOP 切面編程
  • SpringEE spring 對javaEE其他模塊的支持
  • Spring DAO DAO模式的思想是將業務邏輯代碼與數據庫交互代碼分離,降低兩者之間的耦合。還提供了JDBC的抽象層,和對聲明式事務和編程式事務的支持
  • Spring ORM 提供了對ORM框架的支持Hibernate和Mybatis等
  • Spring Web Spring對web模塊的支持。Struts2和Springmvc等

這裏寫圖片描述

Spring除了核心的IOC和AOP功能之外,從後臺數據庫的交互DAO和ORM到跨V(View)和C(Control)的Web模塊,它提供的模塊支持應用在整個項目中,簡單的說,它什麼都可以搞定,非常強大。

(2) 控制反轉IOC(Inversion of Control)和依賴注入DI(Dependency Injection)式同一個概念:
(what) 當某個角色(可以看作式一個Java實例)需要另一個角色(被調用者)的協助式,在傳統的程序中,通常由調用者來創建被調用者的實例,但在spring中,創建被調用者實例的工作不再由調用者來完成,因此稱爲控制反轉,創建被調用者實例的工作通常由spring容器來完成,然後注入調用者,因此也稱爲依賴注入。

小編認爲,只有控制反轉(IOC)在spring的容器中創建被調用者的Bean實例,才能依賴注入(構造器注入,Setter注入,接口注入)到調用者的Bean實例中,這應該是一個先後過程。

(why)Spring可以有效的組織J2EE應用各層的對象。不管是控制層的Control對象,還是業務層的Service對象,還是持久層的Dao對象,都可以在Spring的管理下有機地協調,運行,它將各層的對象以鬆耦合的方式組織在一起,Control對象無需關心Service對象的具體實現,Service對象無需關心持久化層對象的具體實現,各層對象的調用完全面向接口。當系統需要重構時,代碼的改寫將大大減少。

(How)關於怎樣用小編就不詳細寫了。

(3)AOP: AOP全名Aspect-Oriented Programming,中文直譯爲面向切面(方面)編程,當前已經成爲一種比較成熟的編程思想,可以用來很好的解決應用系統中分佈於各個模塊的交叉關注點問題。在輕量級的J2EE中應用開發中,使用AOP來靈活處理一些具有橫切性質的系統級服務,如事務處理、安全檢查、緩存、對象池管理等,已經成爲一種非常適用的解決方案。

面向對象編程(OOP)解決問題的重點在於對具體領域模型的抽象,而面向切面編程(AOP)解決問題的關鍵則在於對關注點的抽象。也就是說,系統中對於一些需要分散在多個不相關的模塊中解決的共同問題,則交由AOP來解決;AOP能夠使用一種更好的方式來解決OOP不能很好解決的橫切關注點問題以及相關的設計難題來實現鬆散耦合。因此,面向方面編程 (AOP) 提供另外一種關於程序結構的思維完善了OOP,是OOP的一種擴展技術,彌補補了OOP的不足。

AOP中比較重要的概念有:Aspect、JoinPoint、PonitCut、Advice、Introduction、Weave、Target Object、Proxy Object等。

Advice(通知): 爲開發人員想要實現的功能,例如,安全,事務,日誌。
這裏寫圖片描述

這裏寫圖片描述

當每次調用service包下的任何類的任何方法時,都會先調用Aop中的切面的功能。因爲事務早就在spring中全部封裝好了,沒有如此複雜,例如純xml的註解配置事務,註解版的事務配置更是簡單的一批。

 <context:component-scan base-package="com.iotek"/>
      <!-- 配置事務異常封裝 -->
      <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

      <bean id="dataSource"
          class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
          <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
          <property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
          <property name="user" value="zhubin"/>
          <property name="password" value="123"/>
      </bean>

      <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
          <property name="dataSource" ref="dataSource"/>

          <property name="annotatedClasses">
            <list>
                <value>com.iotek.domain.User</value>
            </list>
          </property>

          <!-- hibernate 配置屬性-->
          <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
                <!-- hibernate4 才配置事務-->
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
          </property>
       </bean>
       <!-- 將事務給hibernatefactory工廠管理 -->
       <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
       </bean>

       <!--開啓事務註解的支持  與下面手動配置一樣-->
      <tx:annotation-driven transaction-manager="txManager"/>

      <!-- 將限定需要事務的方法,並將它加入通知 -->
      <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="get*" propagation="REQUIRED"/>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="exists" propagation="REQUIRED"/>
            <tx:method name="register" propagation="REQUIRED"/>
            <!-- <tx:method name="*" propagation="SUPPORTS" read-only="true"/> -->
        </tx:attributes>
     </tx:advice>

     <!-- 通知器的配置    通知+切入點 -->
    <aop:config>
        <aop:pointcut expression="execution(public * com.iotek.serviceimpl.*.*(..))" id="pc"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
    </aop:config>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章