spring概念
spring是一站式(分層)開源輕量級框架
JavaEE開發(fā)是分層式開發(fā),即web層堕澄,業(yè)務層邀跃,持久層霉咨。
我們?yōu)槭裁匆褂胹pring框架?
使用spring框架可以簡化程序開發(fā)拍屑,創(chuàng)建和組裝對象途戒,為我們管理事務,加速我們的程序開發(fā)僵驰,最重要的一個原因是其解耦度達到了配置級別喷斋。
spring核心部分
1、IOC(控制反轉(zhuǎn))
IOC(Inversion Of COntrol)控制反轉(zhuǎn)是Spring的基礎蒜茴,簡單地說就是把本來應該由我們手動創(chuàng)建對象這個過程交給了spring來完成星爪。
舉例:在原生Java中我們要調(diào)用一個類中的非靜態(tài)方法的話,首先要new一個對象,然后再去調(diào)用粉私,這樣做就耦合度非常高顽腾。
public class User{
public void function() {
........
}
}
想要在service層調(diào)用user中的function()方法,首先就得new一個user對象诺核,再調(diào)用對象中的方法:
User user = new User();
user.function();
這種做法的缺點是耦合度太高抄肖,可以看到,當User這個類做出一些改變時(例如類名變更)猪瞬,service層創(chuàng)建user對象的代碼也要做出改動憎瘸,如此高的耦合度不僅增加了調(diào)試難度,且有可能導致在大型項目的開發(fā)中產(chǎn)生不必要的錯誤陈瘦。
進一步的優(yōu)化方法是使用工廠模式解耦:
public class UserService {
public void function() {
......
}
}
public class UserServlet{
UserServlet us = Factory.getService();
}
// 工廠類
public class factory {
public static UserService getService(){
return new UserService();
}
}
通過以上代碼可以看到使用工廠模式已經(jīng)向“高內(nèi)聚幌甘,低耦合”的思想靠近了一步,但仍然不夠痊项,于是就有了spring框架锅风,其使用方式以及原理如下:
底層原理
1. ioc功能操作
(1)通過配置文件完成
(2)通過注解方式完成
2. ioc底層原理使用技術(shù)
(1)xml配置文件
(2)dom4j解析xml
(3)工廠模式
(4)反射
具體實現(xiàn)如下:
public class UserService{
}
第一步:創(chuàng)建xml配置文件,配置其創(chuàng)建對象類鞍泉;
<bean id="userService" class="http://類所在路徑.UserService"/>
第二步:創(chuàng)建工廠類皱埠,使用dom4j解析配置文件+反射;
public static UserService getService() {
// 1.使用dom4j解析xml文件
// 根據(jù)id值UserService咖驮,得到id值對應class屬性值
String classValue = "class屬性值";
// 2.使用反射創(chuàng)建對象
class class1 = class.forName(classValue);
// 創(chuàng)建類對象
UserService service = class1.newInstance();
return service;
}
通過以上操作降低了耦合度边器。
2、AOP(面向切面編程)
AOP(Aspect Oriented Programming)托修,即面向切面編程忘巧;Spring AOP模塊主要應用在如下場景:
- 事務處理
- 日志處理
- 異常處理
- 權(quán)限控制
- 系統(tǒng)性能監(jiān)控
AOP底層原理
使用動態(tài)代理實現(xiàn)
(1)基于JDK的代理
適用于有接口情況,使用動態(tài)代理創(chuàng)建接口實現(xiàn)類代理對象
(2)基于CGLIB動態(tài)代理
適用于沒有接口情況睦刃,使用動態(tài)代理創(chuàng)建類的子類代理對象
提到AOP砚嘴,我們雖然知道這是面向切面編程,但依然是一頭霧水,不知何為切面际长,因此在學習之前我們要先了解關(guān)于AOP的部分術(shù)語耸采,需要重點掌握的術(shù)語有三個,如下:
- 切入點(Pointcut):對連接點(Joinpoint)進行攔截的定義工育。
- 切面(Aspect):類是對物體特征的抽象虾宇,切面就是對橫切關(guān)注點的抽象,是切入點和通知的結(jié)合翅娶。
- 通知(Advice):所謂通知指的就是指攔截到連接點之后要執(zhí)行的代碼文留,通知分為前置、后置竭沫、異常、最終骑篙、環(huán)繞通知五類蜕提。
AOP采取的是橫向抽取機制,取代了傳統(tǒng)縱向繼承體系重復性代碼靶端。
那么何為軟件的橫向和縱向谎势?
從縱向結(jié)構(gòu)來看就是我們軟件的各個模塊,它所負責的是軟件的核心業(yè)務(如購商品購買杨名、添加購物車等)脏榆;從橫向來看的話,軟件的各個模塊之間又有所關(guān)聯(lián)台谍,其中會包含一些公共模塊(例如日志须喂、權(quán)限等);這些公共模塊可以存在于各個核心業(yè)務中趁蕊,而AOP的處理將兩者分離坞生,使開發(fā)人員可以專注于核心業(yè)務的開發(fā),提高了開發(fā)效率掷伙。
結(jié)尾
在學習spring框架這條路上實在是任重而道遠是己,以上只是在學習過后對知識點脈絡的梳理,如有錯誤任柜,懇請指正卒废。