欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

AOP的實現原理是什么

林玟書2年前20瀏覽0評論

AOP的實現原理是什么?

IOC:

java程序中的每個業務邏輯至少需要兩個或以上的對象來協作完成,通常,在使用其他的合作對象時,均要使用像new object() 這樣的語法來完成合作對象的申請工作。你會發現:對象間的耦合度高了。而IOC的思想是:Spring容器來實現這些相互依賴對象的創建、協調工作。對象只需要關心業務邏輯本身就可以了。從這方面來說,對象如何得到他的協作對象的責任被反轉了(IOC、DI)。

IOC是基于java的反射機制以及工廠模式實現的。具體可以看下這兩篇文章,https://www.cnblogs.com/Eason-S/p/5851078.html和http://blog.csdn.net/liushuijinger/article/details/35978965,寫的都很好

工場:各類都實現了某一接口,并提供一個工場類,根據傳入參數的不同來創建不同的對象

反射:可以根據類名獲取該類實例, Class.forName(ClassName).newInstance()

在使用spring的時候會將每一個service定義為一個bean,這些bean的名字肯定是不同的,spring會維護一個xml文件,文件中各條記錄的id是bean的名字,value是對應的完整類名(包括路徑),在項目啟動時將該文件中的id和value獲取,通過反射的方式將value即類名所對應的實例創建,然后將id即bean的名字與實例以類似鍵值對的方式存儲在spring容器中,當需要使用時直接利用getBean(String beanName)從容器中獲取對應的實例。

AOP主要是使用動態代理實現 https://www.cnblogs.com/lcngu/p/5339555.html,https://www.cnblogs.com/cenyu/p/6289209.html這個講代理的也挺好

AOP(面向切面編程)技術利用一種稱為“橫切”的技術,解剖封裝的對象內部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,這樣就能減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護性。AOP把軟件系統分為兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關系不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處都基本相似。比如權限認證、日志、事務處理。

動態代理(被代理的類需要實現一個接口):中使用InvocationHandler接口和Proxy類來實現,在InvocationHandler中的invoke(Proxy proxy,Method method, object arg[])方法,中處理日志,認證,事務等操作

步驟:(1)構造InvocationHandler處理器,定義invoke()方法(2)獲取Proxy代理類,并生成代理類對象,調用方法完成相關操作

Proxy.newProxyInstance()

public static Object newProxyInstance(ClassLoader loader,

Class<?>[] interfaces,

InvocationHandler h)

throws IllegalArgumentException

newProxyInstance,方法有三個參數:

loader: 用哪個類加載器去加載代理對象

interfaces:動態代理類需要實現的接口

h:動態代理方法在執行時,會調用h里面的invoke方法去執行,invoke(Proxy proxy,Method method, object arg[])

靜態代理:實現了被代理類接口的類,其中保存了一個被代理類的實例。在接口的實現方法中,調用被代理對象對應的方法,同時添加需要的其他操作。缺點:代理類和委托類都實現了同樣的接口,代碼重復;當需要對對不同的委托類實現相同的處理時,需要定義多個代理類

無論是靜態代理還是動態代理都需要委托類實現接口,如果要對不實現接口的類進行代理,就需要使用cglib庫,使用Enhancer來創建代理類,使用MethodIntercepter接口,重寫intercept()方法,實現具體操作。

java 反射的作用,AOP的實現原理是什么