• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Spring 框架入門

    一.Why

    1.Spring框架給你提供了很多現有的功能(IoC、AOP、聲明式事務等、SpringMVC等)

    這些功能可以直接拿來用、提高開發效率

    2.進一步提高軟件產品的質量

    框架是前人對軟件開發經驗的總結,相當于站在巨人的肩膀上,讓一個普通的程序員也能寫出高質量的軟件成品(符合軟件工程的規范,例如高內聚低耦合 OCP等)

    不用框架做小的項目沒問題,但是做大的項目就需要框架做強大的支持,這一點從MyBatis就可以看出來,如果不用MyBatis,用JDBC做項目太繁瑣了

    二.what

    spring 綜合型框架(功能很多) 
    這里寫圖片描述

    1.IOC容器 
    Inversion Of Control 控制反轉

    2.對持久層支持(DAO ORM) 
    簡化hibernate開發(簡化jdbc開發) 
    聲明式事務 
    3.web層集成(控制器 jsp) 
    自己的MVC框架 spring mvc

    整合web層框架 struts1 、struts2、WebWork、JSF等

    4.AOP

    Aspect Oriented Programming 面向切面編程

    切面說白了就是一個類 可以給任何方法前面或后面加方法 攔截器就是一個切面 思想就是AOP思想

    5.JEE支持 
    JMS即Java消息服務(Java Message Service)

    JCA (J2EE 連接器架構,Java Connector Architecture): 用來連接非java語言編寫的系統.

    Remoting 遠程方法調用

    EJBs 企業級javaBean 處理分布式業務

    Email 郵件

    JMX(Java Management Extensions,即Java管理擴展)

    三.IOC容器(核心功能)

    IOC —> Inversion Of Control —>控制反轉

    問:什么是容器?

    1.集合 list

    2.tomcat jsp/servlet容器 只管理jsp servlet對象生命周期(從創建到銷毀)

    3.spring IOC容器能管理所有對象的周期(從創建到銷毀 對象的存取)

    問:為什么要使用IOC容器(IOC容器的好處)

    1.解耦 (徹底實現OCP) 
    2.Inversion Of Control 控制反轉 
    3.單例

    1,如何使用spring

    1)導jar包

    spring-core-3.2.4.RELEASE.jar 
    spring-beans-3.2.4.RELEASE.jar 
    spring-context-3.2.4.RELEASE.jar 
    spring-expression-3.2.4.RELEASE.jar 
    commons-logging-1.1.1.jar

    下載:http://download.csdn.net/detail/qq_24082497/9604253

    2)舉一個簡單例子,筆記本換屏,定義類和接口

    //接口
    public interface IScreen {
         public void display();
    }
    //14存屏幕
    public class Screen14 implements IScreen{
    
        public Screen14(){
            System.out.println("創建了Screen14對象");
        }
    
        public void display(){
            System.out.println("使用14寸屏幕進行顯示");
        }
    }
    
    //14存高分屏
    public class RetinaScreen14 implements IScreen{
    
        public RetinaScreen14(){
            System.out.println("創建了RetinaScreen14對象");
        }
    
        public void display(){
            System.out.println("使用14寸高分屏顯示");
        }
    }
    
    
    //筆記本
    
    public class Notebook {
    
        private String pinpai;
    
        private IScreen screen;
    
        public Notebook(){
            System.out.println("創建了Notebook對象");
        }
    
        public void setScreen(IScreen screen){
            System.out.println("調用了setScreen方法  設置屏幕");
            this.screen = screen;
        }
    
    
        public String getPinpai() {
            return pinpai;
        }
    
    
        public void setPinpai(String pinpai) {
            System.out.println("調用setPinpai 設置品牌");
            this.pinpai = pinpai;
        }
    
        public IScreen getScreen() {
            return screen;
        }
    
        public void work(){
    
            screen.display();
    
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    3)配置文件

    applicationContext.xml java工程放到src下 相當于classes

    <?xml version="1.0" encoding="UTF-8"?>
    <beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    
    
        <!-- 使用反射創建對象 -->
        <!--Screen14 screen14 = new Screen14();-->
        <bean id="screen14" class="com.test.Screen14"/>
    
    
        <!--Notebook notebook = new Notebook();-->
        <bean id="notebook" class="com.test.Notebook">
            <!-- 
                notebook.setPinpai("聯想");
                notebook.setScreen(screen14);
             -->
            <property name="pinpai" value="聯想"/>
            <property name="screen" ref="screen14"/>
        </bean>
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4.測試類

    public class Test {
    
        public static void main(String[] args) {
    
            //獲得spring IOC容器
            //創建對象、設置依賴關系
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
            //從容器中取id為notebook的對象
            Notebook notebook = (Notebook)context.getBean("notebook");
    
            notebook.work();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.控制翻轉 
    Inversion of Control 控制翻轉 
    1)創建對象的控制權 —–>由程序員 反轉給了spring完成 
    2)設置依賴關系的控制權利 —–>本來是程序員 notebook.setScreen(screen14);現在交給了spring完成

    好處: 
    1.不用new 和 set了省事了(框架幫你完成了)

    2.解耦(徹底實現OCP)

    3.符合現實生活:

    控制反轉這個名詞不太形象,所以spring又換了一種更加形象的解釋,叫DI,其實是一個思想,只是DI更好理解罷了。

    DI:Denpendency Injection 依賴注入 
    有兩種注入方式: 
    1)setter注入:使用set方法給筆記本的屏幕初始化,告訴筆記本運行時到底依賴于哪個屏幕 Screen14 還是 RetinaScreen14 
    2)構造器注入:調用構造方法對屬性進行初始化

    3.IOC容器的好處之單例

     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
      Notebook notebook1 = (Notebook)context.getBean("notebook");
      Notebook notebook2 = (Notebook)context.getBean("notebook");
    
      System.out.println(notebook1==notebook2);//true 證明兩次獲得的是同一個對象
      notebook.work();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:兩次得到的是一個對象 getBean方法只是在容器里取出一開始創建的對象而已,并沒有創建對象,創建對象由第一句完成

    總結:IOC容器除了是一個普通容器外,主要解決了統一管理對象生命周期、解耦合、維護依賴關系,以及應用程序對單例的大量需要等問題。

    推薦一個交流學習群:819940388 里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源!



    版權聲明:本文為qq_42674747原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_42674747/article/details/81051394

    智能推薦

    Spring框架入門分析

    定位 輕量級的企業級 Java 應用程序開發框架,基礎版本只有 2 MB 左右的大小。核心特性是可以用于開發任何 Java 應用程序,但是在 Java EE 平臺上構建 web 應用程序是需要擴展的。 Spring 框架的目標是使 J2EE 開發變得更容易使用,通過啟用基于 POJO 編程模型來促進良好的編程實踐。 架構分析:Core Containe IOC容器: Spring BeanFact...

    spring框架入門學習

    1.   Spring概述 1.1. Spring是什么 Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題, 因此它將面向接口的編程思想貫穿整個系統應用。Spring是于2003 年興起的一個輕量級的Java 開發框架, 由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式...

    框架入門-spring01

    目前的主流框架:     SSH:spring strust2   hibernate     SSM:spring springMVC MyBatis 三層架構:     表示層--jsp(springMVC/struts)     業務邏輯層--servi...

    Spring框架入門(二)—— AOP

    1  AOP介紹 1.1  什么是AOP     在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP(面向對象編程)的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    猜你喜歡

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    精品国产乱码久久久久久蜜桃不卡