AOPのDelegateInterceptor

1.IBase.java

package examples.di;

public interface IBase {
 public abstract void run();
}

2.Dummy.java

package examples.di;

public abstract class Dummy implements IBase {
}

3.Substance.java

package examples.di.impl;

import examples.di.IBase;

public class Substance implements IBase {
    public void run() {
        System.out.println(this);
    }
}

 

4.AopDelegateClient.java

package examples.di.main;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

import examples.di.Dummy;
import examples.di.IBase;

public class AopDelegateClient {
    private static String PATH = "Delegate.dicon";
    public static void main( String[] args ){
        S2Container container = S2ContainerFactory.create(PATH);
        IBase base = (IBase) container.getComponent(Dummy.class);
        for (int i = 0; i < 5; ++i) {
            base.run();
        }

    }
}

5.Delegate.dicon

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
    <component class="examples.di.Dummy">
        <aspect>
            <component class="org.seasar.framework.aop.interceptors.DelegateInterceptor">
                <initMethod name="setTarget">
                    <arg>new sample.aop.delegateinterceptor.Substance()</arg>
                </initMethod>
            </component>
        </aspect>
    </component>
</components>

 

運行結果爲:

examples.di.impl.Substance@2bb514

examples.di.impl.Substance@2bb514
examples.di.impl.Substance@2bb514
examples.di.impl.Substance@2bb514
examples.di.impl.Substance@2bb514

 

如果改爲:

<component class="examples.di.Dummy">
        <aspect>
            <component class="org.seasar.framework.aop.interceptors.PrototypeDelegateInterceptor">
                    <property name="targetName">"target"</property>
            </component>
        </aspect>
    </component>
    <component name="target" class="examples.di.impl.Substance"  instance="prototype"/>

則運行結果爲:

examples.di.impl.Substance@1617189
examples.di.impl.Substance@64f6cd
examples.di.impl.Substance@872380
examples.di.impl.Substance@2bb514
examples.di.impl.Substance@17d5d2a
生成了不同的實例

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章