gpt4 book ai didi

java - 如何注入(inject)SDK接口(interface)的新实现?

转载 作者:行者123 更新时间:2023-12-01 17:44:25 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com