亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

淺談Spring靜態切入點使用方法

系統 1798 0

所謂Spring靜態切入點,相對于動態切入點來說,具有良好的性能,因為靜態切入點只在代理創建時候執行一次,而不是在運行期間,每次目標方法執行前都進行執行,下面,以實例說明如何定義靜態切入點

?

看我我前一篇blog的朋友都知道,如果不定義切入點,通知方法是會對整個目標類的所有方法均進行切入的
但實際需求中,我們可能對其中的幾個方法執行A通知,對其他的方法執行B通知,這時候,就需要通過定義不同的切入點來進行區分

目標接口:

?

package ?StaticAdvisorTest;

public ? interface ?Shopping? ... {
??
public ?String?buySomething(String?type);
??
public ?String?buyAnything(String?type);
??
public ?String?sellSomething(String?type);
??
public ?String?sellAnything(String?type);

}

?javabean:

?

package ?StaticAdvisorTest;

public ? class ?Customer? ... {
??
private ?String?name;
??
private ?String?age;
??
public ?Customer() ... {
??????
??}

??
public ?Customer(String?name,String?age) ... {
??????
this .name = name;
??????
this .age = age;
??}

public ?String?getAge()? ... {
????
return ?age;
}

public ? void ?setAge(String?age)? ... {
????
this .age? = ?age;
}

public ?String?getName()? ... {
????
return ?name;
}

public ? void ?setName(String?name)? ... {
????
this .name? = ?name;
}

}

?

業務目標實現類:

?

package ?StaticAdvisorTest;

public ? class ?ShoppingImpl? implements ?Shopping? ... {
????
private ?Customer?customer;
????
public ?Customer?getCustomer()? ... {
????????
return ?customer;
????}

????
public ? void ?setCustomer(Customer?customer)? ... {
????????
this .customer? = ?customer;
????}

????
public ?String?buySomething(String?type)? ... {
????????System.out.println(
this .getCustomer().getName() + " ?bye? " + type + " ?success " );
????????
return ? null ;
????}

????
????
public ?String?buyAnything(String?type)? ... {
???????System.out.println(
this .getCustomer().getName() + " ?bye? " + type + " ?success " );
???????
return ? null ;

?????}

????
public ?String?sellAnything(String?type)? ... {
????????System.out.println(
this .getCustomer().getName() + " ?sell? " + type + " ?success " );
????????
return ? null ;
????}

????
public ?String?sellSomething(String?type)? ... {
?????????System.out.println(
this .getCustomer().getName() + " ?sell? " + type + " ?success " );
???????????
return ? null ;
????}


}

?

通知(切面)方法:

?

package ?StaticAdvisorTest;

import ?java.lang.reflect.Method;

import ?org.springframework.aop.MethodBeforeAdvice;
// 前置通知
public ? class ?WelcomeAdvice? implements ?MethodBeforeAdvice? ... {

????
public ? void ?before(Method?method,?Object[]?args,?Object?obj)
????????????
throws ?Throwable? ... {
????????String?type
= (String)args[ 0 ];
????????System.out.println(
" Hello?welcome?to?buy? " + type);

????}


}

?

下面是重點,我們想對所有的buy方法進行通知處理,也就是在所有的buy方法上定義切面

spring為我們創建了靜態切入點的父類 StaticMethodMatcherPointCut ,如果我們想實現自制的靜態切入點,只要繼承這個類就可以了,不過一般情況下,我們使用spring提供的靜態切入點NameMatchMethodPointCut就足夠了

配置文件如下:

?

<? xml?version="1.0"?encoding="UTF-8" ?>
<! DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"? >
< beans >
?
< bean? id ="customer" ?class ="StaticAdvisorTest.Customer" >
???
< constructor-arg? index ="0" >
?????
< value > gaoxiang </ value >
???
</ constructor-arg >
????
< constructor-arg? index ="1" >
?????
< value > 26 </ value >
???
</ constructor-arg >
?
</ bean >
?
< bean? id ="shoppingImpl" ?class ="StaticAdvisorTest.ShoppingImpl" >
???
< property? name ="customer" >
?????
< ref? local ="customer" />
???
</ property >
?
</ bean >
<!-- ?定義通知? -->
< bean? id ="shoppingAdvise" ?class ="StaticAdvisorTest.WelcomeAdvice" ></ bean >
<!-- ?定義切入點? -->
< bean? id ="shoppingPointCutAdvisor" ?class ="org.springframework.aop.support.NameMatchMethodPointcutAdvisor" >
??
< property? name ="mappedName" >
????
< value > sell* </ value >
??
</ property >
??
< property? name ="advice" >
????
< ref? bean ="shoppingAdvise" />
??
</ property >
</ bean >
<!-- ?定義代理? -->
< bean? id ="StaticAdvisorTest" ?class ="org.springframework.aop.framework.ProxyFactoryBean" >
??
< property? name ="proxyInterfaces" >
????
< value > StaticAdvisorTest.Shopping </ value >
??
</ property >
??
< property? name ="interceptorNames" >
????
< list >
??????
< value > shoppingPointCutAdvisor </ value >
????
</ list >
??
</ property >
??
< property? name ="target" >
????
< ref? bean ="shoppingImpl" />
??
</ property >
</ bean >

</ beans >

?<!-- 如果不使用通配符,則用以下表達
? <property name="mappedNames">
??? <list>
?????? <value>sellSomething</value>
?????? <value>sellAnything</value>
??? </list>
? </property>
? -->

測試程序:

?

package ?StaticAdvisorTest;

import ?java.io.File;

import ?org.springframework.beans.factory.BeanFactory;
import ?org.springframework.beans.factory.xml.XmlBeanFactory;
import ?org.springframework.core.io.FileSystemResource;



public ? class ?TestAdvisor? ... {

????
public ? static ? void ?main(String[]?args)? ... {

????????String?filePath
= System.getProperty( " user.dir " ) + File.separator + " StaticAdvisorTest " + File.separator + " hello.xml " ;
????????
????????BeanFactory?factory
= new ?XmlBeanFactory( new ?FileSystemResource(filePath));
????????
????????Shopping?shopping
= null ;

????????shopping
= (Shopping)factory.getBean( " StaticAdvisorTest " );
????????shopping.buySomething(
" something " );
????????shopping.buyAnything(
" anything " );
????????shopping.sellAnything(
" anything " );
????????shopping.sellSomething(
" something " );
????????

淺談Spring靜態切入點使用方法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人久久18免费网站 | 九九艹| 手机看片亚洲 | 爱爱免费播放视频在线观看 | 天天爽天天操 | 欧美三级做爰在线 | 国产激情久久久久久影院 | aaa一级毛片| 久热这里只精品热在线观看 | 在线成人免费观看国产精品 | 国产一级视频播放 | 久久久久久久亚洲精品 | 久久在线资源 | 777午夜精品被窝影院 | 九九99热久久精品在线9 | 奇米影视777在线观看 | 日本无翼乌全彩无遮挡动漫 | 久久国产精品高清一区二区三区 | 欧美亚洲一二三区 | 午夜欧美| 纯欧美一级毛片_免费 | 香港三级做爰大爽视频 | 香蕉视频禁止18 | 久久久久久国产精品免费免费 | 久久久久久青草大香综合精品 | 国产99页| 欧美成人久久久 | 亚洲精品亚洲人成在线 | 日韩特级毛片免费观看视频 | 亚洲欧美一区二区三区综合 | 特级毛片免费视频 | 成人精品一区久久久久 | 有码在线 | 国产日韩在线播放 | 国产美女在线观看 | 国产精品夜色视频一区二区 | 欧美一区二区日韩一区二区 | 成人三级做爰在线观看男女 | 久久精品一 | 亚洲精品国产第一区二区三区 | 久久久久免费精品视频 |