国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring】Spring中的設(shè)計(jì)模式

這篇具有很好參考價(jià)值的文章主要介紹了【Spring】Spring中的設(shè)計(jì)模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

責(zé)任鏈模式

Spring中的Aop的通知調(diào)用會(huì)使用責(zé)任鏈模式

責(zé)任鏈模式介紹

角色:
	抽象處理者(Handler)
	具體處理者(ConcreteHandler1)
	客戶類角色(Client)

Spring源碼介紹

spring中Aop的責(zé)任鏈模式,相對(duì)于傳統(tǒng)的責(zé)任鏈模式做了一定的改造。
傳統(tǒng)的設(shè)計(jì)模式,抽象處理者會(huì)有一個(gè)方法設(shè)置和獲取具體處理者的下一個(gè)處理者的方法。
如:

public abstract class Handler {
	private Handler next;
	public Handler getNext() {
		return next;
	}
	public void setNext(Handler next) {
	this.next = next;
	}
	//處理請(qǐng)求的方法
	public abstract void handleRequest(String request);
}

但是Spring中的責(zé)任鏈模式?jīng)]有這兩個(gè)方法,而是抽出一個(gè)公共的處理方法,方法內(nèi)有數(shù)組和下標(biāo)來完成鏈?zhǔn)健?/p>

public class ReflectiveMethodInvocation implements ProxyMethodInvocation, Cloneable {
	// 環(huán)繞通知類
	protected final List<?> interceptorsAndDynamicMethodMatchers;
	// 下標(biāo)
	private int currentInterceptorIndex = -1;
/**
	 * 遞歸獲取通知,然后執(zhí)行
	 * @return
	 * @throws Throwable
	 */
	@Override
	@Nullable
	public Object proceed() throws Throwable {
		// We start with an index of -1 and increment early.
		// 從索引為-1的攔截器開始調(diào)用,并按序遞增,如果攔截器鏈中的攔截器迭代調(diào)用完畢,開始調(diào)用target的函數(shù),這個(gè)函數(shù)是通過反射機(jī)制完成的
		// 具體實(shí)現(xiàn)在AopUtils.invokeJoinpointUsingReflection方法中
		if (this.currentInterceptorIndex == this.interceptorsAndDynamicMethodMatchers.size() - 1) {
			return invokeJoinpoint();
		}

		// 獲取下一個(gè)要執(zhí)行的攔截器,沿著定義好的interceptorOrInterceptionAdvice鏈進(jìn)行處理
		Object interceptorOrInterceptionAdvice =
				this.interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);
		if (interceptorOrInterceptionAdvice instanceof InterceptorAndDynamicMethodMatcher) {
			// Evaluate dynamic method matcher here: static part will already have
			// been evaluated and found to match.
			// 這里對(duì)攔截器進(jìn)行動(dòng)態(tài)匹配的判斷,這里是對(duì)pointcut觸發(fā)進(jìn)行匹配的地方,如果和定義的pointcut匹配,那么這個(gè)advice將會(huì)得到執(zhí)行
			InterceptorAndDynamicMethodMatcher dm =
					(InterceptorAndDynamicMethodMatcher) interceptorOrInterceptionAdvice;
			Class<?> targetClass = (this.targetClass != null ? this.targetClass : this.method.getDeclaringClass());
			if (dm.methodMatcher.matches(this.method, targetClass, this.arguments)) {
				return dm.interceptor.invoke(this);
			}
			else {
				// Dynamic matching failed.
				// Skip this interceptor and invoke the next in the chain.
				// 如果不匹配,那么proceed會(huì)被遞歸調(diào)用,知道所有的攔截器都被運(yùn)行過位置
				return proceed();
			}
		}
		else {
			// It's an interceptor, so we just invoke it: The pointcut will have
			// been evaluated statically before this object was constructed.
			// 普通攔截器,直接調(diào)用攔截器,將this作為參數(shù)傳遞以保證當(dāng)前實(shí)例中調(diào)用鏈的執(zhí)行
			return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);
		}
	}
}

其中的最后一句

// 普通攔截器,直接調(diào)用攔截器,將this作為參數(shù)傳遞以保證當(dāng)前實(shí)例中調(diào)用鏈的執(zhí)行
return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);

MethodInterceptor就是抽象處理者

@FunctionalInterface
public interface MethodInterceptor extends Interceptor {

	/**
	 * 
	 */
	Object invoke(MethodInvocation invocation) throws Throwable;
}

具體的執(zhí)行者有
AspectJAfterAdvice、AspectJAfterReturningAdvice、AspectJAfterThrowingAdvice、AspectJMethodBeforeAdvice、AspectJAroundAdvice

工廠模式

Spring中的獲取Bean就是工廠模式,如:BeanFactory獲取

工廠模式介紹

角色:
	抽象產(chǎn)品
	具體產(chǎn)品
	抽象工廠
	具體工廠

Spring源碼介紹

抽象工廠

public interface BeanFactory {
	Object getBean(String name) throws BeansException;
	...
}

具體工廠

適配器模式

Spring中的根據(jù)通知的時(shí)候,將Advisor適配為MethodInterceptor

適配器介紹

角色
		目標(biāo)接口:
		抽象適配器:
		具體適配器:
		抽象源接口:
		具體源接口:

適配器就是將源接口適配為目標(biāo)接口

Spring中的源碼介紹

抽象適配器:

public interface AdvisorAdapter {
	/**
	 * 適配方法,將Advisor適配為MethodInterceptor Advisor就是源接口:MethodInterceptor就是目標(biāo)接口
	 */
	MethodInterceptor getInterceptor(Advisor advisor);
}

具體適配器:
【Spring】Spring中的設(shè)計(jì)模式,spring,spring,設(shè)計(jì)模式,java

class AfterReturningAdviceAdapter implements AdvisorAdapter, Serializable {

	@Override
	public boolean supportsAdvice(Advice advice) {
		return (advice instanceof AfterReturningAdvice);
	}

	
	@Override
	public MethodInterceptor getInterceptor(Advisor advisor) {
		AfterReturningAdvice advice = (AfterReturningAdvice) advisor.getAdvice();
		return new AfterReturningAdviceInterceptor(advice);
	}
}

具體源接口:
【Spring】Spring中的設(shè)計(jì)模式,spring,spring,設(shè)計(jì)模式,java

代理模式

cglib、gdk代理

模版方法

Spring中的refresh方法中的postProcessFactory、onRefresh等

觀察者模式

Spring中的事件監(jiān)聽

角色:
抽象目標(biāo),
具體目標(biāo),
具體觀察者,
抽象觀察者

抽象目標(biāo)里面會(huì)有一個(gè)數(shù)組,存放具體的觀察者,并且會(huì)有一個(gè)添加刪除觀察者的方法,還有一個(gè)通知所有觀察者的方法。

具體目標(biāo)需要通知觀察者的時(shí)候,遍歷數(shù)組通知觀察者

Spring中的事件監(jiān)聽做了一定的變動(dòng)
有四個(gè)角色
廣播器:其實(shí)就是我們的抽象目標(biāo),包含了添加刪除,廣播事件方法
監(jiān)聽器:監(jiān)聽廣播器廣播的事件
事件:
事件源:觸發(fā)事件的人,將事件添加到廣播器中

構(gòu)造器模式

Spring中解析xml或者注解為BeanDefinition信息的時(shí)候會(huì)使用BeanDefinitionHandler類

該類里面包含了一個(gè) BeanDefinition 字段,可以調(diào)傭BeanDefinitionHandler中的方法給該字段設(shè)值,最后可以調(diào)用方法獲取BeanDefinition文章來源地址http://www.zghlxwxcb.cn/news/detail-625202.html

到了這里,關(guān)于【Spring】Spring中的設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解鎖Spring Boot中的設(shè)計(jì)模式—04.橋接模式:探索【橋接模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—04.橋接模式:探索【橋接模式】的奧秘與應(yīng)用實(shí)踐!

    橋接模式也稱為橋梁模式、接口模式或者柄體(Handle and Body)模式,是將 抽象部分 與他的 具體實(shí)現(xiàn)部分 分離 ,使它們都可以獨(dú)立地變化,通過 組合 的方式 建立 兩個(gè)類之間的 聯(lián)系 ,而不是繼承。 橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在將抽象部分與實(shí)現(xiàn)部分分離,使它們

    2024年02月21日
    瀏覽(24)
  • 解鎖Spring Boot中的設(shè)計(jì)模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    委派模式 是一種負(fù)責(zé)任務(wù)的調(diào)度和分配模式,類似于代理模式但更注重結(jié)果而非過程。它可以被視為一種特殊情況下的靜態(tài)代理的全權(quán)代理,但并不屬于GOF 23種設(shè)計(jì)模式之一,而是歸類為行為型模式。 委派模式在Spring框架中廣泛應(yīng)用,其中最常見的例子是 DispatcherServlet ,它

    2024年02月19日
    瀏覽(27)
  • Java 設(shè)計(jì)者模式以及與Spring關(guān)系(四) 代理模式

    Java 設(shè)計(jì)者模式以及與Spring關(guān)系(四) 代理模式

    目錄 簡(jiǎn)介: 23設(shè)計(jì)者模式以及重點(diǎn)模式 代理模式(Proxy Pattern) 靜態(tài)代理示例 spring中應(yīng)用 動(dòng)態(tài)代理 1.基于JDK的動(dòng)態(tài)代理 target.getClass().getInterfaces()作用 內(nèi)名內(nèi)部類寫法(更簡(jiǎn)潔,但不推薦) 2.基于CGLIB實(shí)現(xiàn) spring中應(yīng)用 本文是個(gè)系列一次會(huì)出兩個(gè)設(shè)計(jì)者模式作用,如果有關(guān)聯(lián)就三

    2024年01月23日
    瀏覽(92)
  • java Spring中使用到的設(shè)計(jì)模式

    java Spring中使用到的設(shè)計(jì)模式

    單例模式(Singleton Pattern)是java中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類提供了一種訪問其唯一對(duì)象的方式,可以直接

    2024年02月16日
    瀏覽(26)
  • 解鎖Spring Boot中的設(shè)計(jì)模式—02.解釋器模式:探索【解釋器模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計(jì)模式—02.解釋器模式:探索【解釋器模式】的奧秘與應(yīng)用實(shí)踐!

    解釋器模式(Interpreter Pattern)是一種行為設(shè)計(jì)模式,它用于定義語(yǔ)言的文法,并且解釋語(yǔ)言中的表達(dá)式。在Java中,解釋器模式可以用于構(gòu)建解釋器以解析特定的語(yǔ)言或表達(dá)式,如數(shù)學(xué)表達(dá)式、查詢語(yǔ)言等。 優(yōu)點(diǎn): 靈活性: 解釋器模式可以 靈活地添加新的表達(dá)式和規(guī)則 ,因

    2024年02月19日
    瀏覽(96)
  • Java 設(shè)計(jì)者模式以及與Spring關(guān)系(七) 命令和迭代器模式

    Java 設(shè)計(jì)者模式以及與Spring關(guān)系(七) 命令和迭代器模式

    本文是個(gè)系列一次會(huì)出兩個(gè)設(shè)計(jì)者模式作用,如果有關(guān)聯(lián)就三個(gè),除此外還會(huì)講解在spring中作用。 23設(shè)計(jì)者模式以及重點(diǎn)模式 我們都知道 設(shè)計(jì)者模式 有 3 類 23 種設(shè)計(jì)模式,標(biāo)紅是特別重要的設(shè)計(jì)者模式建議都會(huì),而且熟讀于心,標(biāo)藍(lán)是指其次重要建議也要明白。 (1)創(chuàng)建

    2024年01月24日
    瀏覽(24)
  • Java 設(shè)計(jì)者模式以及與Spring關(guān)系(六) 裝飾和模版方法模式

    Java 設(shè)計(jì)者模式以及與Spring關(guān)系(六) 裝飾和模版方法模式

    本文是個(gè)系列一次會(huì)出兩個(gè)設(shè)計(jì)者模式作用,如果有關(guān)聯(lián)就三個(gè),除此外還會(huì)講解在spring中作用。 23設(shè)計(jì)者模式以及重點(diǎn)模式 我們都知道 設(shè)計(jì)者模式 有 3 類 23 種設(shè)計(jì)模式,標(biāo)紅是特別重要的設(shè)計(jì)者模式建議都會(huì),而且熟讀于心,標(biāo)藍(lán)是指其次重要建議也要明白。 (1)創(chuàng)建

    2024年01月24日
    瀏覽(25)
  • spring的設(shè)計(jì)模式----簡(jiǎn)單工廠模式

    spring的設(shè)計(jì)模式----簡(jiǎn)單工廠模式

    spring中IoC 控制反轉(zhuǎn),底層是工廠模式。 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 工廠模式提供了一種將對(duì)象的實(shí)例化過程封裝在工廠類中的方式。通過使用工廠模式,可以將對(duì)象的

    2024年02月17日
    瀏覽(19)
  • Spring學(xué)習(xí)筆記(二)Spring的控制反轉(zhuǎn)(設(shè)計(jì)原則)與依賴注入(設(shè)計(jì)模式)

    是一種設(shè)計(jì)原則,降低程序代碼之間的耦合度 對(duì)象由Ioc容器統(tǒng)一管理,當(dāng)程序需要使用對(duì)象時(shí)直接從IoC容器中獲取。這樣對(duì)象的控制權(quán)就從應(yīng)用程序轉(zhuǎn)移到了IoC容器 依賴注入是一種消除類之間依賴關(guān)系的設(shè)計(jì)模式。例如,A類要依賴B類,A類不再直接創(chuàng)建B類,而是把這種依賴

    2024年02月19日
    瀏覽(21)
  • Spring??到的設(shè)計(jì)模式

    Spring 框架是一個(gè)廣泛應(yīng)用于企業(yè)級(jí) Java 開發(fā)的開源框架,它提供了一系列的模塊,包括依賴注入、面向切面編程、事務(wù)管理等功能,以簡(jiǎn)化企業(yè)級(jí)應(yīng)用的開發(fā)。在 Spring 的設(shè)計(jì)和實(shí)現(xiàn)中,采用了多種設(shè)計(jì)模式來解決不同的問題,提高代碼的可維護(hù)性、可擴(kuò)展性和可重用性。

    2024年01月19日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包