Closed fumengame closed 3 weeks ago
可以先收集先收集需要处理的 class ,后续在 startupSuccess
方法中处理。收集 class 的方式有很多种,这里介绍一个 ActionParserListener 接口的方式。
实现伪代码,收集 class
public final class GameInitParserListener implements ActionParserListener {
public static final Set<Class<?>> set = new HashSet<>();
@Override
public void onActionCommand(ActionParserContext context) {
Class<?> actionControllerClazz = context.getActionCommand().getActionControllerClazz();
if (actionControllerClazz.getAnnotation(GameInit.class) != null) {
set.add(actionControllerClazz);
}
}
}
BarSkeletonBuilder builder = ...;
builder.addActionParserListener(new GameInitParserListener());
处理
// org.springframework.context.ApplicationContext
ApplicationContext applicationContext;
public void startupSuccess(BrokerClient brokerClient) {
var set = GameInitParserListener.set;
for (Class<?> c : set) {
var bean = applicationContext.getBean(c);
}
}
其他参考
感谢,问题已解决
我想实现一个功能,在LogicServer启动成功后 调用一次ActionController所在的Component里面标注了GameInit注解的方法,类似这种功能怎么实现
我本来是想在Component里面一个方法上加上PostConstruct注解,但是这个函数启动很快,在逻辑服没启动之前就运行了