<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-109  評論-187  文章-25  trackbacks-0

    最近深入的學習了一下 Spring, 感受到了 AOP 的威力,以前看過 BEA DEV2DEV 雜志,有一期專門的 AOP ,里面很詳細講的,看了有一年多了,今天真正來作個例子

    ?

    這個例子也是從 dev2dev 上看的,

    1 :建一個接口 IBusinessLogic

    ?

    package test;

    ?

    public interface IBusinessLogic {

    ?????? public void foo(String i);

    ?

    }

    2 :建一個接口實現的類

    package test;

    ?

    public class BusinessLogic implements IBusinessLogic {

    ?

    ?????? public void foo(String i) {

    ????????????? System.out.println("Inside BusinessLogic.foo()");

    ?

    ?????? }

    ?

    }

    ?

    3 建立一個應用程序 MainApplication

    ?

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

    ????????????? ?// Read the configuration file

    ??????? ApplicationContext ctx =

    ????????? new FileSystemXmlApplicationContext(

    ??????????? "E:\\work\\Test\\src\\spring-config.xml");

    ??????? //Instantiate an object

    ??????? IBusinessLogic testObject =

    ????????? (IBusinessLogic) ctx.getBean("businesslogicbean");

    ??????? testObject.foo("11");

    ?????? }

    ?

    <? xml version = "1.0" encoding = "UTF-8" ?>

    <! DOCTYPE beans PUBLIC

    ????????? "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

    ?

    < beans >

    ?

    ?? <!-- Bean configuration -->

    ?? < bean id = "businesslogicbean"

    ?? class = "org.springframework.aop.framework.ProxyFactoryBean" >

    ????? < property name = "proxyInterfaces" >

    ???????? < value > test.IBusinessLogic </ value >

    ????? </ property >

    ????? < property name = "target" >

    ???????? < ref local = "beanTarget" />

    ????? </ property >

    ???? <property name="interceptorNames">

    ???????? <list>

    ??????????? <value>theTracingBeforeAdvisor</value>

    ??????????? <value>theTracingAfterAdvisor</value>

    ???????? </list>

    ???????? </property>

    ????

    ?? </ bean >

    ?? <!-- Bean Classes -->

    ?? < bean id = "beanTarget"

    ?? class = "test.BusinessLogic" />

    ??

    ????? <bean id="theTracingBeforeAdvisor"

    ????? class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

    ????? <property name="advice">

    ???????? <ref local="theTracingBeforeAdvice"/>

    ????? </property>

    ????? <property name="pattern">

    ???????? <value>.*</value>

    ????? </property>

    ?? </bean>

    ???

    ?? <!-- Advisor pointcut definition for after advice -->

    ?? <bean id="theTracingAfterAdvisor"

    ????? class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

    ????? <property name="advice">

    ???????? <ref local="theTracingAfterAdvice"/>

    ????? </property>

    ????? <property name="pattern">

    ???????? <value>.*</value>

    ????? </property>

    ?? </bean>

    ?

    ?? <!-- Advice classes -->

    ?? <bean id="theTracingBeforeAdvice"

    ????? class="test.TracingBeforeAdvice"/>

    ?? <bean id="theTracingAfterAdvice"

    ????? class="test.TracingAfterAdvice"/>

    ?????

    ?????

    ?

    </ beans >

    ?

    紅色的暫時不配置,你就可以看到打印出來的結果

    Inside BusinessLogic.foo()

    ?

    4 :建立 2 個類 TracingBeforeAdvice

    ?

    package test;

    ?

    import java.lang.reflect.Method;

    ?

    import org.springframework.aop.MethodBeforeAdvice;

    ?

    public class TracingBeforeAdvice implements MethodBeforeAdvice {

    ?????? public void before(Method m, Object[] args, Object target) throws Throwable {

    ????????????? System.out.println(m.getClass());

    ????????????? System.out.println(args);

    ????????????? System.out.println(target);

    ????????????? System.out.println("Hello world! (by " + this.getClass().getName()

    ??????????????????????????? + ")");

    ?????? }

    }

    ?

    ?

    TracingAfterAdvice

    package test;

    ?

    import java.lang.reflect.Method;

    ?

    import org.springframework.aop.AfterReturningAdvice;

    ?

    public class TracingAfterAdvice

    implements AfterReturningAdvice

    {

    ?public void afterReturning(Object object,

    ????????????????????????? Method m,

    ????????????????????????? Object[] args,

    ????????????????????????? Object target)

    ????????????????????????? throws Throwable

    ?{

    ???? System.out.println(

    ?????? "Hello world! (by " +

    ?????? this.getClass().getName() +

    ?????? ")");

    ?}

    }

    然后把紅色部分的配置上去,

    運行 MainApplication

    你就可以看到

    //class java.lang.reflect.Method

    //[Ljava.lang.Object;@3a9bba

    //test.BusinessLogic@1c5ddc9

    Hello world! (by test.TracingBeforeAdvice)

    Inside BusinessLogic.foo()

    Hello world! (by test.TracingAfterAdvice)

    ?

    AOP 在方法開始和技術的時候起到了作用!!!

    posted on 2006-05-18 18:04 小小程序程序員混口飯吃 閱讀(403) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 在线免费观看h片| 亚洲欧洲无码AV不卡在线| 亚洲AV无码一区二区一二区| 亚洲蜜芽在线精品一区| 亚洲视屏在线观看| 最近中文字幕完整版免费高清| 精品久久久久久久久免费影院| 亚洲白色白色在线播放| 4虎永免费最新永久免费地址| 免费大黄网站在线观| 亚洲精品成人无限看| 中国极品美軳免费观看| 亚洲日韩精品A∨片无码| 国产区在线免费观看| 在线精品免费视频| 久久精品国产亚洲AV天海翼 | 亚洲欧美黑人猛交群| 热久久精品免费视频| 美女免费精品高清毛片在线视| 亚洲精品一级无码鲁丝片| 亚洲一本综合久久| 免费观看国产网址你懂的| 亚洲精品第一国产综合野| 免费又黄又爽又猛大片午夜| 午夜福利不卡片在线播放免费| 亚洲黄色激情视频| 国产免费变态视频网址网站| 一级毛片在播放免费| 亚洲AV无码AV男人的天堂| 亚洲成人免费电影| 大桥未久亚洲无av码在线| 区久久AAA片69亚洲| 免费人成在线观看69式小视频| 亚洲日韩看片无码电影| 亚洲精品无码久久久| 亚洲视频在线免费观看| 久久亚洲国产精品五月天婷| 亚洲av永久无码天堂网| 亚洲中文字幕无码永久在线| 亚洲视频在线观看免费视频| 美女黄网站人色视频免费|