国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

WEB開發(fā)中Spring AOP實(shí)際應(yīng)用一例

2019-11-18 12:58:34
字體:
供稿:網(wǎng)友

   在WEB開發(fā)中,用戶對(duì)網(wǎng)頁的訪問權(quán)限檢查是一個(gè)重要的環(huán)節(jié)。以STRUST為例,我們需要在Action的excute方法中編寫相關(guān)的代碼(一般是調(diào)用基類的函數(shù)),也很顯然,在每個(gè)Action中這是一種重復(fù)勞動(dòng)。
假如我們?cè)趀xcute運(yùn)行之前,能夠自動(dòng)去調(diào)用基類的權(quán)限檢查函數(shù),這無疑是個(gè)好的解決辦法。AOP就為我們提供了這樣一種解決方法。

  下面以一個(gè)簡(jiǎn)化的實(shí)例介紹實(shí)現(xiàn)的辦法。

  首先我們做一個(gè)接口:

public interface CheckInterface {
  public abstract void check(String name);
  public abstract void excute(String name);
}


  再做一個(gè)基類:

public abstract class BaseClass implements CheckInterface {
public BaseClass() {
}
public void check(String name){
if (name.equals("supervisor"))
System.out.else {
System.out.println("No
access privilege! Please do sth. else!");
}
}
}

  再做一個(gè)測(cè)試類:

public class ExcuteClass extends BaseClass {
public ExcuteClass() {
}

public void excute(String name){
System.out.println("Excute here!"+name);
}
}


  好了,下面做一個(gè)通知類(Advice):

import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;

public class BeforeAdvisor implements MethodBeforeAdvice {
private static Logger logger=Logger.getLogger(BeforeAdvisor.class);
public void before(Method m, Object[] args, Object target) throws Throwable {
if (target instanceof CheckInterface){
logger.debug("Is Instanceof CheckInterface!!!");
CheckInterface ci=(CheckInterface)target;
ci.check((String)args[0]);
}
}
}

  其中重要的before方法的參數(shù):Object target傳入的通知的對(duì)象(即測(cè)試類的接口),Method m, Object[] args分別是該對(duì)象被調(diào)用的方法和參數(shù)。我們?cè)賮碜鱯pring bean定義xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>Spring Quick Start</description>
<bean id="MyAdvisor" class="com.wysm.netstar.test.springaop.BeforeAdvisor"/>

<bean id="myPointcutAdvisor2" class="org.springframework.aop.support.RegeXPMethodPointcutAdvisor">
<property name="advice">
<ref local="MyAdvisor" />
</property>
<property name="patterns">
<list>
<value>.*excute.*</value>
</list>
</property>
</bean>

<bean id="checkInterface" class="com.wysm.netstar.test.springaop.ExcuteClass"/>

<bean id="myCheckClass" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.wysm.netstar.test.springaop.CheckInterface</value>
</property>
<property name="target">
<ref local="checkInterface" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor2</value>
</property>
</bean>

</beans>

  這個(gè)定義文件指明了ExcuteClass為監(jiān)視對(duì)象,它的excute方法被執(zhí)行的時(shí)候,BeforeAdvisor將被調(diào)用。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴中市| 友谊县| 浦县| 奉化市| 武邑县| 阳西县| 肇源县| 连城县| 通海县| 雷州市| 博爱县| 镇赉县| 辽阳县| 巨鹿县| 墨竹工卡县| 兴安县| 滁州市| 丘北县| 台南市| 京山县| 建始县| 汕尾市| 民权县| 延寿县| 乐都县| 西城区| 左云县| 霍城县| 车险| 万宁市| 湖州市| 泽普县| 合江县| 博罗县| 洛浦县| 依兰县| 突泉县| 铜山县| 太仆寺旗| 永修县| 开鲁县|