1.Count.java
package examples.di;
public interface Count {
public void add();
public int get();
}
2.CountImpl.java
package examples.di.impl;
import examples.di.Count;
public class CountImpl implements Count {
private int _count = 0;
public void add() {
int a = _count;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
_count = a + 1;
System.out.println(a);
}
public int get() {
return _count;
}
}
3.AopSyncClient.java
package examples.di.main;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import examples.di.Count;
public class AopSyncClient {
private String PATH = "Count.dicon";
private Count _count = null;
public void init() {
S2Container container = S2ContainerFactory.create(PATH);
_count = (Count) container.getComponent(Count.class);
}
public void start() {
System.out.println("count: " + _count.get());
Runnable r = new Runnable() {
public void run() {
_count.add();
}
};
Thread[] thres = new Thread[5];
for (int i=0; i<5; i++) {
thres[i] = new Thread(r);
thres[i].start();
}
for (int i=0; i<5; i++) {
try {
thres[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("count: " + _count.get());
}
public static void main(String[] args) {
AopSyncClient asc = new AopSyncClient();
asc.init();
asc.start();
}
}
4.Count.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.impl.CountImpl">
<aspect>
<component class="org.seasar.framework.aop.interceptors.SyncInterceptor"/>
</aspect>
</component>
</components>
如果不加<aspect>则每次运行thres[i] = new Thread(r);的时候都会生成一个新的实例