<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 小小程序程序員混口飯吃 閱讀(399) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 在线观看亚洲免费| 久久久久亚洲AV成人网| 麻豆91免费视频| 亚洲人成人无码网www电影首页| 国产高清不卡免费视频| 亚洲一级大黄大色毛片| 亚洲?V无码乱码国产精品| 国色精品va在线观看免费视频| 亚洲国产情侣一区二区三区| 国产精品免费视频一区| 成人黄网站片免费视频| 亚洲日韩一区二区一无码| 亚洲综合色在线观看亚洲| 91九色老熟女免费资源站| 黄色三级三级三级免费看| 亚洲人成网址在线观看| 四虎影视永久免费观看| 67pao强力打造高清免费| 精品成人一区二区三区免费视频| 午夜亚洲国产理论秋霞| 亚洲成av人片不卡无码久久| 亚洲精品在线免费观看视频| 男女猛烈无遮掩视频免费软件| 亚洲精品在线免费看| 国产亚洲精品自在线观看| 欧美在线看片A免费观看| 特级做A爰片毛片免费看无码| 亚洲私人无码综合久久网| 久久亚洲免费视频| 亚洲成人一区二区| 国产桃色在线成免费视频| 在线观看人成视频免费无遮挡 | 久久久婷婷五月亚洲97号色 | 久久久久久国产精品免费免费| 中文在线观看国语高清免费| 亚洲日本va一区二区三区| 亚洲精品偷拍无码不卡av| 中文字幕亚洲激情| 国产无遮挡又黄又爽免费视频| 麻豆国产精品免费视频| 免费人成在线观看网站|