原创 自己手寫一個AOP動態代理框架(2)

之前實現的自己手寫一個AOP動態代理框架(1)只能根據控制器,業務層,DAO層等等註解的形式來進行切面,這裏仿Spring,支持AspectJ的表達式進行定位類方法資源,然後進行代理。 集成AspectJ的語法樹,即複用Asp

原创 萬字長文!自己手寫一個AOP動態代理框架(1)

前面提到過動態代理的有兩種簡單的實現方式,就是JDK動態代理和CGLIB。 不懂先看前文:SpringAOP的實現之代理模式 自己寫嘛當然是乞丐版了,爲了實現簡單 但是又具有一定的通用性(拒絕對被代理類有實現接口的強硬要求)。所以

原创 Spring的AOP開發簡單示例

SpringAOP支持方法級別的增強。 大致有 @Before:方法執行前執行 @After:方法執行後還沒有返回時執行 @Around:環繞通知,在Before之前,在After之前。 @AfterReturning:方法返回結

原创 Spring源碼-Aware及其子接口

前面說過容器對Bean本身的邏輯基本是無侵入的,因此Bean一般不需要了解容器的狀態和直接使用容器,但是再某些時候需要在Bean中需要獲取到容器的實例來對其操作,這時候就需要再Bean中設定對容器的感知了。 這便是Aware接口

原创 Spring源碼(3)-Spring中的ApplicationContext

前面提到的BeanFactory接口和起相關的 二級三級實現,只是簡單容器,我們平時 用到的最多的還是ApplicationContext接口的實現類.BeanFactory面向Spring自身,而後者是面向Spring的使用者。

原创 SpringAOP的實現之代理模式

要想了解Spring的AOP的實現,首先必須要瞭解代理模式。 如果只是簡單代理一個對象,那麼我們自己就可以很好的實現。 聲明一個抽象主題,支付接口: public interface ToCPayment { voi

原创 Spring源碼中getBean實例的詳細流程

本文主要研究getBean的流程。 1.首先嚐試框架會從容器的緩存裏獲取單例Bean實例,這個單例Bean有可能是一個普通Bean,也有可能是一個FactoryBean,然後調用他的getObject方法返回。 2.如果這裏1

原创 Spring源碼(4)-Spring中的Resource,ResourceLoader,容器的關係

之前提到Spring會將配置問價或者配置類讀取到內存轉換成一個個的Resource實例。然後將Resource解析一個個的BeanDefinitioon. Resource接口 public interface Resourc

原创 Spring源碼之PostProcessor接口

Spring框架提供了各種PostProcessor的接口,作爲容器或者Bean的後置處理器,其實這些PostProcessor本省也是需要註冊到容器總的bean,裏面定義的方法會在特定的時期唄容器所調用。 通過這種機制框架自身

原创 Spring如何解決循環依賴的?

假設有兩個實例A,B循環依賴。 且作用域都是單例,因爲Spring只支持單例的循環依賴。 假設掃描到了A,調用getBean方法,由於是單例,調用getSingleton方法,發現三個緩中都沒有A,進入CreateBeanIns

原创 Spring源碼之Spring是怎麼創建Bean的?

在首次啓動容器的時候,必然會進入CreateBean,所以這裏直接採用DeBUG的方式追蹤源碼。 啓動Spring容器之前在方法上打上斷點。 調試出來自己認識的Bean step into 創建Bean的主要做以下幾件事

原创 Spring源碼(2)-Spring中的容器BeanFactory

Spring規定所有的IOC容器都必須實現BeanFactory接口, BeanFactory是一個頂級的容器接口。 BeanFactory BeanFactory裏有一個特殊的屬性,String FACTORY_BEAN_PR

原创 Spring源碼(1)-Spring中的Bean和BeanDefinition

用過Spring的一定知道,Spring提供了IOC的功能,也就是反轉控制,將對象之間的關係 轉而使用配置來管理,從而提供了 依賴注入的功能。 Spring通過將對象包裝在Bean中,來達到管理對象和進行其他額外操作的目的。

原创 小總結:ArrayList 和LinkedList的面試題

ArrayList 無參數構造器構造,現在 add 一個值進去,此時數組的大小是多少,下一次擴容前最大可用大小是多少? 此處數組的大小是 1,下一次擴容前最大可用大小是 10,因爲 ArrayList 第一次擴容時,是有默認值的,

原创 深入Java集合ArrayList的源碼解析

現在由大惡人付有傑來從增刪改查幾個角度輕度解析ArrayList的源碼 首先ArrayList的底層數據結構非常簡單,就是一個數組。 從源碼第115行我們可以得出信息,他的默認數組長度是10。 /** * Defa