Spring 知識點

一、什麼是spring?前端

Spring 是個java企業級應用的開源開發框架,Spring適用於任何Java應用,Spring 框架經過POJO爲基礎的編程模型簡化Java應用的開發。java

二、Spring框架的優勢是什麼?web

  • 輕量:Spring 是輕量的,基本的版本大約2MB。
  • 控制反轉:Spring經過控制反轉實現了鬆散耦合,對象們給出它們的依賴,而不是建立或查找依賴的對象們。
  • 面向切面的編程(AOP):Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。
  • 容器:Spring 包含並管理應用中對象的生命週期和配置。
  • MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。
  • 事務管理:Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。
  • 異常處理:Spring 提供方便的API把具體技術相關的異常(好比由JDBC,Hibernate or JDO拋出的)轉化爲一致的unchecked 異常。

三、什麼是IOC ?spring

Ioc—Inversion of Control,即「控制反轉」,不是什麼技術,而是一種設計思想。Spring IOC 容器 負責建立對象,管理對象(經過依賴注入(DI),裝配對象,配置對象,而且管理這些對象的整個生命週期,實現了鬆耦合。數據庫

四、Spring框架中的工廠編程

1.ApplicationContext接口後端

  • 使用ApplicationContext工廠的接口,使用該接口能夠獲取到具體的Bean對象
  • 該接口下有兩個具體的實現類
    • ClassPathXmlApplicationContext -- 加載類路徑下的Spring配置文件
    • FileSystemXmlApplicationContext -- 加載本地磁盤下的Spring配置文件
public static void main(String[] args) {
        // 使用Spring的工廠:
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 經過工廠得到類:
        MyController myController = (MyController) applicationContext.getBean("userController");
        myController.test();

    }
複製代碼

2.BeanFactory工廠(是Spring框架早期的建立Bean對象的工廠接口) 使用BeanFactory接口也能夠獲取到Bean對象bash

public static void main(String[] args) {
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        MyService myService  = (MyService) factory.getBean("userService");
        myService.showTest();
    }
複製代碼

BeanFactory和ApplicationContext的區別服務器

BeanFactory--BeanFactory採起延遲加載,第一次getBean時纔會初始化Bean架構

ApplicationContext--在加載applicationContext.xml時候就會建立具體的Bean對象的實例,還提供了一些其餘的功能

3.實現接口ApplicationContextAware 實現該接口的setApplicationContext(ApplicationContext context)方法,並保存ApplicationContext 對象。Spring初始化時,會經過該方法將ApplicationContext對象注入。

如下是實現ApplicationContextAware接口方式的代碼,前面兩種方法相似:

public class SpringContextUtil implements ApplicationContextAware {  
    // Spring應用上下文環境  
    private static ApplicationContext applicationContext;  
    /** 
     * 實現ApplicationContextAware接口的回調方法,設置上下文環境 
     *  
     * @param applicationContext 
     */  
    public void setApplicationContext(ApplicationContext applicationContext) {  
        SpringContextUtil.applicationContext = applicationContext;  
    }  
    /** 
     * @return ApplicationContext 
     */  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
    /** 
     * 獲取對象 
     *  
     * @param name 
     * @return Object
     * @throws BeansException 
     */  
    public static Object getBean(String name) throws BeansException {  
        return applicationContext.getBean(name);  
    }  
}
複製代碼

雖然,spring提供的後三種方法能夠實如今普通的類中繼承或實現相應的類或接口來獲取spring 的ApplicationContext對象,可是在使用是必定要注意實現了這些類或接口的普通java類必定要在Spring 的配置文件applicationContext.xml文件中進行配置。不然獲取的ApplicationContext對象將爲null。

4.經過Spring提供的ContextLoader

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);
複製代碼

最後提供一種不依賴於servlet,不須要注入的方式。可是須要注意一點,在服務器啓動時,Spring容器初始化時,不能經過如下方法獲取Spring 容器,細節能夠查看spring源碼org.springframework.web.context.ContextLoader。

事件傳遞 Bean自動裝配 各類不一樣應用層的Context實現

五、SpringMvc架構

架構流程

  • 用戶發送請求至前端控制器DispatcherServlet
  • DispatcherServlet收到請求調用HandlerMapping處理器映射器。
  • 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
  • DispatcherServlet經過HandlerAdapter處理器適配器調用處理器
  • 執行處理器(Controller,也叫後端控制器)。
  • Controller執行完成返回ModelAndView
  • HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
  • DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
  • ViewReslover解析後返回具體View
  • DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
  • DispatcherServlet響應用戶

6.Spring 架構

核心容器(Spring core)

核心容器提供Spring框架的基本功能。Spring以bean的方式組織和管理Java應用中的各個組件及其關係。Spring使用BeanFactory來產生和管理Bean,它是工廠模式的實現。BeanFactory使用控制反轉(IoC)模式將應用的配置和依賴性規範與實際的應用程序代碼分開。BeanFactory使用依賴注入的方式提供給組件依賴。

Spring上下文(Spring context)

Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業服務,如JNDI、EJB、電子郵件、國際化、校驗和調度功能。

Spring面向切面編程(Spring AOP)

經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring框架中。因此,能夠很容易地使 Spring框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。

Spring DAO模塊

DAO模式主要目的是將持久層相關問題與通常的的業務規則和工做流隔離開來。Spring 中的DAO提供一致的方式訪問數據庫,無論採用何種持久化技術,Spring都提供一直的編程模型。Spring還對不一樣的持久層技術提供一致的DAO方式的異常層次結構。

Spring ORM模塊

Spring 與全部的主要的ORM映射框架都集成的很好,包括Hibernate、JDO實現、TopLink和IBatis SQL Map等。Spring爲全部的這些框架提供了模板之類的輔助類,達成了一致的編程風格。

Spring Web模塊

Web上下文模塊創建在應用程序上下文模塊之上,爲基於Web的應用程序提供了上下文。Web層使用Web層框架,可選的,能夠是Spring本身的MVC框架,或者提供的Web框架,如Struts、Webwork、tapestry和jsf。

Spring MVC框架(Spring WebMVC)

MVC框架是一個全功能的構建Web應用程序的MVC實現。經過策略接口,MVC框架變成爲高度可配置的。Spring的MVC框架提供清晰的角色劃分:控制器、驗證器、命令對象、表單對象和模型對象、分發器、處理器映射和視圖解析器。Spring支持多種視圖技術。

相關文章
相關標籤/搜索