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

标签 java spring dependency-injection

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

相关文章:

java - 有什么方法可以从协调器(非父)pom 指定模块属性吗?

java - Java模拟医院(优先队列)

java - 无法解决 Glide 库 android 中的 centercrop 占位符错误等

java - 即使我在 Spring 类中声明该字段,为什么 @Autowired 为 null?

c# - 为什么注入(inject)到我的 Azure Function v2 中的 ILogger 缺少 APPINSIGHTS_INSTRUMENTATIONKEY?

java - 当使用 throws 关键字调用 void 时,所有抛出的错误都适用于我调用 void 的地方

java - @Autowired 与 New Keyword 和 Application context 创建对象的区别

java - 实例化作业时 Quartz Scheduler 错误

java - JdbcSQL异常 : Unique index or primary key violation

java - 如何使用 spring 依赖注入(inject)连接多个 fxml Controller ?