這篇文章主要介紹了JSP開發之Spring方法注入之替換方法實現的相關的JSP資料,對JSP感興趣的朋友可以參考下本篇文章
JSP開發之Spring方法注入之替換方法實作
Spring提供了一種替換方法實現的機制,可以讓我們改變某個bean某方法的實作。打個比方我們有一個bean,其中擁有一個add()方法可以用來計算兩個整數的和,但這個時候我們想把它的實現邏輯改為如果兩個整數的值相同則把它們相乘,否則還是把它們相加,在不改變或不能改變原始碼的情況下我們就可以透過Spring提供的替換方法實現機制來實現這一要求。
替換方法實現機制的核心是MethodReplacer接口,其中定義了一個reimplement ()方法,我們的替換方法實現的主要邏輯就是在該方法中實現的,
具體定義如下:
public interface MethodReplacer { /** * Reimplement the given method. * @param obj the instance we're reimplementing the method for * @param method the method to reimplement * @param args arguments to the method * @return return value for the method */ Object reimplement(Object obj, Method method, Object[] args) throws Throwable; }
我們可以看到reimplement()方法將接收三個參數,其中obj表示需要替換方法實現的bean物件,method需要替換的方法,args則表示對應的方法參數。針對前面打的比方,假設我們有如下這樣一個類別定義對應的bean。
public class BeanA { public int add(int a, int b) { return a+b; } } <bean id="beanA" class="com.app.BeanA"/>
如果我們需要替換add()方法的實作為a與b相等時則相乘,否則就相加,則我們可以針對該方法提供一個對應的MethodReplacer的實作類,具體實作如下圖所示。
public class BeanAReplacer implements MethodReplacer { /** * @param obj 对应目标对象,即beanA * @param method 对应目标方法,即add * @param args 对应目标参数,即a和b */ public Object reimplement(Object obj, Method method, Object[] args) throws Throwable { Integer a = (Integer)args[0]; Integer b = (Integer)args[1]; if (a.equals(b)) { return a * b; } else { return a + b; } } }
之後就需要在定義beanA時指定使用BeanAReplacer來取代beanA的add()方法實現,這是透過replaced-method元素來指定的。其需要指定兩個屬性,name和replacer。 name用來指定需要替換的方法的名稱,而replacer則用來指定用來替換的MethodReplacer對應的bean。所以,此時我們的beanA應該如下定義:
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"/> </bean>
如果我們的MethodReplacer將要替換的方法在對應的bean中屬於重載類型的方法,即存在多當不同方法名稱相同的方法時,我們還需要透過在replaced-method元素下透過arg-type元素來定義對應方法參數的類型,這樣就可以區分需要替換的是哪一個方法。所以,針對上述範例,我們也可以如下定義:
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"> <arg-type match="int"/> <arg-type match="int"/> </replaced-method> </bean>
#對應方法名稱的方法只存在一個時,arg-type將不起作用,即Spring此時不會根據arg-type去取對應的方法進行替換,或者換句話說就是當replaced-method指定名稱的方法只存在一個時,無論arg-type如何定義都是可以的。
相關推薦:
以上是JSP開發之Spring方法注入之替換方法實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!