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