ssm框架如今是java web開發的三個主流框架 ,其實嚴格來算只算是兩個框架,由於springmvc屬於spring框架 ,是spring的一個mvc子框架前端
那麼咱們下面就來了解一下三大框架把java
spring框架是一個爲Java應用程序的開發提供了綜合、普遍的基礎性支持的Java平臺。web
spring主要的核心依賴有 beans , code , context ,spel 這是spring裏最基本的也是最核心的jar包(或者說是依賴)spring
spring有兩個核心思想 (IOC (控制反轉) , AOP(面向切面編程))sql
IOC (控制反轉) : 控制反轉就是一種思想 , 這個思想是怎麼想的呢 , 就是對對象控制權的轉移,從程序代碼自己反轉到了外部容器 。就是想把實體類 的生命週期交給spring去控制 , 讓spring實現建立 ,實現初始化 , 實現銷燬 . 這樣就能夠大大的免去在編寫代碼的過程當中new一個對象 , 衆所周知new 對象 是java代碼編寫裏耦合性最大的一個事情 。數據庫
也說了IOC是一種思想 ,那麼怎麼把這種思想實現呢 ,現在比較流行的的方法是依賴注入 DI(Dependency Injection)編程
DI(依賴注入):是指程序運行過程當中,若須要調用另外一個對象協助時,無須在代碼中建立被調用者,而是依賴於外部容器,由外部容器建立後傳遞給程序。依賴注入是目前最優秀的解耦方式。依賴注入讓Spring的Bean之間以配置文件的方式組織在一塊兒,而不是以硬編碼的方式耦合在一塊兒的。緩存
二者的關係就是ioc是一種思想 ,而DI確實一種實現方式 ,這裏介紹了IOC,那麼下面再來講下spring的另一個核心思想AOP服務器
AOP(面向切面編程) : 面向切面編程是對OOP(面向對象編程)的完善和補充 。session
面向切面是面向對象中的一種方式而已。在代碼執行過程當中,動態嵌入其餘代碼,叫作面向切面編程。
AOP採用一種稱爲「橫切」的技術,將涉及多業務流程的通用功能抽取並單獨封裝,造成獨立的切面,在合適的時機將這些切面橫向切入到業務流程指定的位置中。
常見的使用場景有日誌 ,事物管理以及數據庫操做
實現的方式有schema和aspectJ ,後者比較好用
以上就是對spring的兩個核心
動態代理原理:spring AOP採用動態代理來實現
(1)實現InvocationHandler接口
(2)建立代理類(經過java API)
Proxy.newProxyInstance(動態加載代理類,代理類實現接口,使用handler);
(3)調用invoke方法(虛擬機自動調用方法)
日誌處理
//調用目標對象
method.invoke("目標對象","參數");
日誌處理
經過代理對象--(請求信息)-->目標對象---(返回信息)----> 代理對象
springmvc是spring的子框架,繼承於spring框架 , 在ssm框架環境中,springmvc能夠向上的掃描去用spring的東西,可是spring卻不能掃描到springmvc裏面去。
springmvc也是接收請求,返回響應 ,實際上也是一個servlet ,dispatchServlet。
1.性能比struts2好
2.簡單、便捷,易學
3.和spring無縫銜接【IOC,AOP】
4.使用約定優於配置
5.支持Restful
6.異常處理,國際化,數據驗證,類型轉換等
springmvc的工做原理
用戶對服務器發送請求,請求被前端控制器servlet DispatcherServlet(中央處理器)捕獲,對請求URL進行解析,而後根據該URI,調用HandlerMapper(處理器映射器)獲去該handler配置的全部相關的對象,而後根據獲取的handler,選擇一個合適的handlerAdapter(附註:若是成功得到HandlerAdapter後,此時將開始執行攔截器的preHandler(…)方法) 。 提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。Handler執行完成後,向DispatcherServlet 返回一個ModelAndView對象;
根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;
ViewResolver 結合Model和View,來渲染視圖
將渲染結果返回給客戶端。
springmvc和servlet的流程實際上是差很少的,都是接受請求,返回響應
全部說springmvc真的是個很是簡單好用的框架
mybatis是目前很是流行的持久層框架,功能很強大,然而其實現卻比較簡單、優雅。
mybatis是一個半自動的orm框架,也仍是須要本身去寫sql語句
mybatis是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架,其主要就完成2件事情:
mybatis的主要設計目的就是讓咱們對執行SQL語句時對輸入輸出的數據管理更加方便,因此方便地寫出SQL和方便地獲取SQL的執行結果纔是MyBatis的核心競爭力。
mybatis和大部分框架同樣須要一個配置文件,若是是和spring整合的話則不怎麼須要,固然若是要開啓緩存的話仍是須要
而後須要mapper映射文件和dao層的類和方法所對應 , 在mapper裏面寫sql語句
單獨的mybatis使用須要解析配置文件,而後去調用mapper裏的sql語句
InputStream in = Resources.getResourceAsStream("MyBatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession();
List<User> list =session.selectList("com.liy.dao.IUserDao.query");
for (User user : list) {
System.out.println(user);
}
session.close();
這是mybatis運用的步驟