我正在使用JADE,JASON(代理框架)和Spring Boot开发应用程序。基本上,我拥有的是一个JADE容器,在该容器中同时注册了Jade和Jason Agents。由于我使用的是Spring,因此我倾向于自动装配服务。在这种情况下,我需要访问一些Jason内部动作(我自定义编写为扩展DefaultInternalAction类)中的某些服务。这似乎不起作用。我知道如何自动装配以及Bean如何工作。我的怀疑是这些内部行动是否在春季进行。我想不是。这就是为什么Autowire可能无法正常工作的原因。有人可以向我解释一下玉器容器内部的实际动作和内部动作,以便让我对在杰森内部动作中使用Autowire有所不同。
答案 0 :(得分:0)
据我所知,内部动作是由jason创建的,而不是spring,因此不能自动装配服务。个人而言,我创建了工厂并将其用于获取服务实例。像这样:
public class SpringPluginFactory {
private static final SpringPluginFactory INSTANCE = new SpringPluginFactory();
private ApplicationContext applicationContext;
private SpringPluginFactory(){}
private <T> T createPlugin(Class<T> iface) {
if(applicationContext == null){
throw new IllegalStateException("applicationContext cannot be null");
}
try {
return applicationContext.getBean(iface);
} catch (Exception e) {
throw new RuntimeException("factory unable to construct instance of " + iface.getName());
}
}
public static <T> T getPlugin(Class<T> iface){
return INSTANCE.createPlugin(iface);
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
然后我创建bean来设置aplicationContext:
@Bean
public SpringPluginFactory pluginFactory(ApplicationContext applicationContext){
SpringPluginFactory pluginFactory = SpringPluginFactory.INSTANCE;
pluginFactory.setApplicationContext(applicationContext);
return pluginFactory;
}
并在任何行为或内部行为中使用工厂
SpringPluginFactory.getPlugin(YouService.class).doSomething();
也许会有所帮助。