我正在使用 Atlassian SDK 创建一个插件。在这个SDK中有一个接口(interface)及其实现,用于获取有关编辑器的一些数据。我已经在这个接口(interface)上创建了一个新的实现,我想将它注入(inject)到我的其他类中。但是当我定义 @Component
或 @Named
时,我收到了很多关于 Thread 和 Runnable 的错误。
我的问题是,是否可以注入(inject)您无权访问的接口(interface)的另一个实现及其默认实现代码(在 SDK 中)。如果是的话我做对了吗?或者我可以通过扩展默认实现的植入来解决这个问题吗?
@ExperimentalApi
public interface FieldHtmlFactory {
List<FieldHtmlBean> getCreateFields(ApplicationUser var1, OperationContext var2, Action var3, MutableIssue var4, boolean var5, List<String> var6);
List<FieldHtmlBean> getLinkedIssueCreateFields(ApplicationUser var1, OperationContext var2, Action var3, MutableIssue var4, Issue var5, boolean var6, List<String> var7);
List<FieldHtmlBean> getEditFields(ApplicationUser var1, OperationContext var2, Action var3, Issue var4, boolean var5);
List<FieldHtmlBean> getInlineEditFields(ApplicationUser var1, OperationContext var2, Action var3, Issue var4, boolean var5);
List<FieldHtmlBean> getSubTaskCreateFields(ApplicationUser var1, OperationContext var2, Action var3, MutableIssue var4, boolean var5, List<String> var6);
}
默认实现:(没有任何注释)
public class FieldHtmlFactoryImpl implements FieldHtmlFactory {...}
我的实现:
@Scanned
@Named("editorImpl")
public class FieldEditorFactoryImpl implements FieldHtmlFactory { ... }
我想使用的地方:
@Scanned
@Path("/table")
public class TableREST {
@Inject
@Named("editorImpl")
private final FieldHtmlFactory fieldEditorFactoryImpl;
@Autowired
public TableREST(FieldHtmlFactory editorImp){
this.editorImp = editorImp;
}
...
}
最佳答案
我做到了。对于可能需要解决方案的人,我想以我的方式...
我从默认实现扩展了我的类(而不是实现接口(interface))。然后我可以为其定义命名注释。
@Named("FieldEditorFactoryImpl")
public class FieldEditorFactoryImpl extends FieldHtmlFactoryImpl {
public FieldEditorFactoryImpl(BeanFactory beanFactory, FieldManager fieldManager, FieldScreenRendererFactory fieldScreenRendererFactory, PermissionManager permissionManager) {
super(beanFactory, fieldManager, fieldScreenRendererFactory, permissionManager);
}
public String sayHelloWorld(){
return "Hello World!";
}
}
@Scanned
@Path("/table")
public class TableREST {
private FieldEditorFactoryImpl fieldEditorFactoryImpl;
@Autowired
public TableREST(@Named("FieldEditorFactoryImpl") FieldHtmlFactory fieldHtmlFactory){
this.fieldEditorFactoryImpl = (FieldEditorFactoryImpl) fieldHtmlFactory;
}
...
}
关于java - 如何注入(inject)SDK接口(interface)的新实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885587/