AOPのDelegateInterceptor

来源:互联网 发布:淘宝有假魅族手机吗 编辑:程序博客网 时间:2024/06/10 15:49

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
生成了不同的实例