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

淺談Spring靜態(tài)切入點使用方法

系統(tǒng) 2012 0

所謂Spring靜態(tài)切入點,相對于動態(tài)切入點來說,具有良好的性能,因為靜態(tài)切入點只在代理創(chuàng)建時候執(zhí)行一次,而不是在運(yùn)行期間,每次目標(biāo)方法執(zhí)行前都進(jìn)行執(zhí)行,下面,以實例說明如何定義靜態(tài)切入點

?

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

目標(biāo)接口:

?

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;
}

}

?

業(yè)務(wù)目標(biāo)實現(xiàn)類:

?

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方法進(jìn)行通知處理,也就是在所有的buy方法上定義切面

spring為我們創(chuàng)建了靜態(tài)切入點的父類 StaticMethodMatcherPointCut ,如果我們想實現(xiàn)自制的靜態(tài)切入點,只要繼承這個類就可以了,不過一般情況下,我們使用spring提供的靜態(tài)切入點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 >

?<!-- 如果不使用通配符,則用以下表達(dá)
? <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靜態(tài)切入點使用方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费一级大毛片a一观看不卡 | 久草在线国产 | 最近中文字幕在线 | 中文 | 精品综合久久久久久蜜月 | 午夜一级毛片 | 亚洲视频二 | 成人性a激情免费视频 | 国产精品麻豆高清在线观看 | 日本aⅴ在线 | 国产成人精品亚洲日本在线观看 | 色综合一区 | 亚洲欧美成人综合久久久 | 欧美日韩视频精品一区二区 | 日韩欧美国产中文 | 国产亚洲精品久久午夜 | 四虎成人在线 | 日韩欧一级毛片在线播无遮挡 | 91在线成人 | 国产热热 | 国产美女流白浆的免费视 | 日韩午夜在线视频不卡片 | 一级片按摩| 久久伊人成人 | 日韩亚州 | 一区二区三区鲁丝不卡麻豆 | 亚洲狠狠色丁香婷婷综合 | 亚洲第一二三四区 | 男人在线影院 | 欧美性色黄大片一级毛片视频 | 国产精品亚洲欧美日韩区 | 久久综合伊人 | 国产乱码精品一区二区三区四川 | 一本久道久久综合狠狠爱 | 国产亚洲精品成人a在线 | 亚洲精品成人一区二区aⅴ 亚洲精品成人一区二区www | 国外欧美一区另类中文字幕 | 国产成人91高清精品免费 | 国产精品久久久久久久小唯西川 | 色综合久久中文字幕综合网 | 亚洲国产成人久久综合一区 | 牛牛影视在线 |