Spring基礎

Spring兩大核心

IOC(Inversion Of Controll,控制反轉(zhuǎn))
是一種設計思想,將原本在程序中手動創(chuàng)建對象的控制權,交由給Spring框架來管理。IOC容器是Spring用來實現(xiàn)IOC的載體,IOC容器實際上就是一個Map(key, value),Map中存放的是各種對象。
這樣可以很大程度上簡化應用的開發(fā),把應用從復雜的依賴關系中解放出來。IOC容器就像是一個工廠,當需要創(chuàng)建一個對象,只需要配置好配置文件/注解即可,不用考慮對象是如何被創(chuàng)建出來的,大大增加了項目的可維護性且降低了開發(fā)難度。

AOP(Aspect-Oriented Programming,面向切面編程)
面向切面編程:把重復的代碼抽取成為共性,當需要的時候再用
能夠?qū)⒛切┯跇I(yè)務無關,卻為業(yè)務模塊鎖共同調(diào)用的邏輯或責任封裝起來
便于減少系統(tǒng)的重復代碼,降低模塊間的耦合度,并有利于未來的可擴展性和維護性

Spring AOP / AspectJ AOP 的區(qū)別?

Spring AOP屬于運行時增強,而AspectJ是編譯時增強。
Spring AOP基于動態(tài)代理(Proxying),而AspectJ基于字節(jié)碼操作(Bytecode Manipulation)。
AspectJ相比于Spring AOP功能更加強大,但是Spring AOP相對來說更簡單。
如果切面比較少,那么兩者性能差異不大。但是,當切面太多的話,最好選擇AspectJ,它比SpringAOP快很多。

Spring優(yōu)勢:

方便解耦,
簡化開發(fā),
方便集成各種優(yōu)秀框架,
方便程序的測試,
AOP編程的支持,
聲明式事務的支持,
降低JavaEE API的使用難度,
Java源碼是經(jīng)典學習范例,

耦合與內(nèi)聚

耦合:模塊間的聯(lián)系

代碼書寫過程中所使用技術的結合緊密度
耦合性也稱塊間聯(lián)系。指軟件系統(tǒng)結構中各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強,模塊的獨立性則越差。模塊間耦合高低取決于模塊間接口的復雜性、調(diào)用的方式及傳遞的信息。
由于衡量軟件中各個模塊之間的互聯(lián)程度,各個技術連接太緊密,拆不開;
耦合高:牽一發(fā)而動全身

內(nèi)聚:模塊內(nèi)的聯(lián)系

內(nèi)聚性又稱塊內(nèi)聯(lián)系。指模塊的功能強度的度量,即一個模塊內(nèi)部各個元素彼此結合的緊密程度的度量。若一個模塊內(nèi)各元素(語名之間、程序段之間)聯(lián)系的越緊密,則它的內(nèi)聚性就越高。
降低程序之間的耦合性

DI依賴注入

注入實際上就是給對象賦值
DI:dependency injection 依賴注入
spring容器中的A對象的運行需要使用spring容器中的B對象,稱為A依賴于B
讓spring將容器中的B對象賦值給A對象中的B變量的過程就稱之為依賴注入

注入的方式

1.set方法注入(set賦值)

  1. 構造方法注入(構造方法賦值)
  2. 注解注入(注解賦值)

Spring所依賴的jar包

<dependencies>
    <!--mybatis的jar包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.3</version>
    </dependency>
    <!--連接數(shù)據(jù)庫jar包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--spring應用上下文jar包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
    <!--spring中操作并整合jdbc的坐標-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
    <!--druid連接池坐標-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
    <!--spring和mybatis進行整合的坐標-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>
</dependencies>

Spring工作流程

  1. dao/mapper層接口編寫對應方法
  2. domain層下編寫封裝對象
  3. service層下編寫方法規(guī)范(接口),service-impl下實現(xiàn)該接口
  4. resourses建立和mapper層路徑一致的xml文件,由于編寫sql語句
  5. resourses下直接存放jdbc.properties,applicationContext.xml ………
  6. applicationContext.xml內(nèi)容:


    image.png
1. 加載外部properties文件 *表示為加載所有的properties文件 比如數(shù)據(jù)庫
2. 配置連接池
3. 配置serviceImpl,由于調(diào)用方法
4. 配置sqlSessionFactory的對象
5. 告知spring,dao層接口所在包

7, 測試方法,一般在測試包下建立


image.png

Spring整合junit

整合思路:

  1. spring提供了一個運行器,這個運行器在執(zhí)行時,能夠創(chuàng)建ioc容器
  2. 通過spring提供的運行器,替換junit自帶的核心運行器
  3. 為spring的運行器,指定容器的創(chuàng)建方式(加載xml配置文件,或加載配置類)
  4. 在測試類中使用依賴注入,注入需要使用的bean

整合步驟:

  1. 導入junit和spring整合的junit的jar包
  2. 在測試類上通過@RunWith注解替換junit自帶的運行器
  3. 在測試類上通過@ContextConfiguration注解,指定容器的創(chuàng)建方式
  4. 通過spring整合junit的坐標版本必須大于等于4.12,否則直接報錯

通過spring整合mybatis

  1. 編寫jdbcConfig配置類,用于加載jdbc配置文件,創(chuàng)建連接池
  2. 編寫mybatisConfig配置類,用于創(chuàng)建sqlsessionFactoryBean和mapperscnnerconfigurer
    注意帶有@bean注解的方法可以添加參數(shù)進行傳遞
  3. 編寫主配置類springConfig配置組件掃描,并導入mybatisConfig配置類
  4. 在service實現(xiàn)類上添加注解
  5. 加載主配置類,創(chuàng)建注解容器進行測試
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、談談你對Spring的理解? spring 是一個開源的輕量級 JavaBean 容器框架。使用 JavaBe...
    執(zhí)著的逗比閱讀 298評論 0 2
  • 們經(jīng)常說的Spring其實指的是Spring Framework(spring 框架)。 Spring框架的核心就...
    xuxw閱讀 130評論 0 0
  • Spring框架基礎 1 什么是Spring框架? Spring框架是框架的框架,因為其提供了對如Structs,...
    abserver閱讀 92評論 0 0
  • Spring架構圖 核心容器:Beans、Core、Context、Expression Language(EL)...
    BINBIN9496閱讀 373評論 0 0
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學鈴聲...
    飄雪兒5閱讀 7,819評論 16 22

友情鏈接更多精彩內(nèi)容