Skip to content

Commit 70be0d3

Browse files
committed
add remark
1 parent 66f9fa4 commit 70be0d3

File tree

3 files changed

+63
-12
lines changed

3 files changed

+63
-12
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
package com.codingapi.springboot.framework.trigger;
22

3+
/**
4+
* 触发的DTO对象
5+
*/
36
public interface Trigger {
47
}

springboot-starter/src/main/java/com/codingapi/springboot/framework/trigger/TriggerContext.java

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package com.codingapi.springboot.framework.trigger;
22

33
import java.lang.reflect.ParameterizedType;
4-
import java.util.ArrayList;
54
import java.util.Iterator;
65
import java.util.List;
76
import java.util.Map;
87
import java.util.concurrent.ConcurrentHashMap;
8+
import java.util.concurrent.CopyOnWriteArrayList;
99

10+
11+
/**
12+
* Trigger与Event模式都提供了订阅的功能。
13+
*
14+
* Trigger模式可以控制触发的规则,例如是否进入触发器,触发器是否在触发以后删除。
15+
* Trigger是单独的消息数据不占用Event的通道。由于Event利用了Spring的事件底层,因此在大规模的事件情况下会堵塞spring的事件通道。
16+
*/
1017
@SuppressWarnings("all")
1118
public class TriggerContext{
1219

@@ -23,45 +30,69 @@ private TriggerContext(){
2330
this.triggers = new ConcurrentHashMap<>();
2431
}
2532

26-
public void addTrigger(TriggerHandler trigger){
27-
Class<? extends Trigger> clazz = getTriggerClass(trigger);
33+
/**
34+
* 添加触发器
35+
* @param handler 触发订阅
36+
*/
37+
public void addTrigger(TriggerHandler handler){
38+
Class<? extends Trigger> clazz = getTriggerClass(handler);
2839
List<TriggerHandler> triggerList = this.triggers.get(clazz);
2940
if(triggerList==null){
30-
triggerList = new ArrayList<>();
41+
triggerList = new CopyOnWriteArrayList<>();
3142
this.triggers.put(clazz,triggerList);
3243
}
33-
triggerList.add(trigger);
44+
triggerList.add(handler);
3445
}
3546

3647

37-
private Class<? extends Trigger> getTriggerClass(TriggerHandler trigger){
38-
ParameterizedType parameterizedType = (ParameterizedType) trigger.getClass().getGenericInterfaces()[0];
48+
/**
49+
* 获取触发器订阅的Trigger类型
50+
* @param handler 触发订阅
51+
* @return Trigger类型
52+
*/
53+
private Class<? extends Trigger> getTriggerClass(TriggerHandler handler){
54+
ParameterizedType parameterizedType = (ParameterizedType) handler.getClass().getGenericInterfaces()[0];
3955
return (Class<? extends Trigger>) parameterizedType.getActualTypeArguments()[0];
4056
}
4157

4258

59+
/**
60+
* 执行触发
61+
* @param trigger trigger触发
62+
*/
4363
public void trigger(Trigger trigger){
4464
Class<? extends Trigger> clazz = trigger.getClass();
4565
Iterator<TriggerHandler> iterator = triggers.get(clazz).iterator();
4666
while (iterator.hasNext()){
4767
TriggerHandler handler = iterator.next();
4868
Class<? extends Trigger> triggerClass = getTriggerClass(handler);
4969
if(triggerClass.equals(clazz)) {
50-
if (handler.preTrigger(trigger)) {
51-
handler.trigger(trigger);
52-
if (handler.remove()) {
53-
iterator.remove();
70+
try {
71+
if (handler.preTrigger(trigger)) {
72+
handler.trigger(trigger);
73+
if (handler.remove()) {
74+
iterator.remove();
75+
}
5476
}
55-
}
77+
}catch (Exception e){}
5678
}
5779
}
5880
}
5981

82+
/**
83+
* 清空触发
84+
* @param clazz 清空的trigger类型
85+
*/
6086
public void clear(Class<? extends Trigger> clazz){
6187
triggers.get(clazz).clear();
6288
}
6389

6490

91+
/**
92+
* 判断是否清空的对象
93+
* @param clazz 清空的trigger类型
94+
* @return true为空
95+
*/
6596
public boolean isEmpty(Class<? extends Trigger> clazz){
6697
return triggers.get(clazz).isEmpty();
6798
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
11
package com.codingapi.springboot.framework.trigger;
22

33

4+
/**
5+
* 触发逻辑
6+
* @param <T> 触发DTO对象 {@link Trigger}
7+
*/
48
public interface TriggerHandler<T extends Trigger> {
59

10+
/**
11+
* 是否进入触发器
12+
* @param trigger 触发对象 {@link Trigger}
13+
* @return true进入 false 不进入
14+
*/
615
boolean preTrigger(T trigger);
716

17+
/**
18+
* 触发执行逻辑
19+
* @param trigger 触发对象 {@link Trigger}
20+
*/
821
void trigger(T trigger);
922

23+
/**
24+
* 执行完成以后是否删除触发器
25+
* @return true删除
26+
*/
1027
boolean remove();
1128

1229
}

0 commit comments

Comments
 (0)