Как внедрить новую реализацию интерфейса SDK? - PullRequest
0 голосов
/ 27 марта 2020

Я использую Atlassian SDK для создания плагина. В этом SDK есть интерфейс и его реализация, которая используется для получения некоторых данных о редакторах. Я создал новую реализацию для этого интерфейса и хочу внедрить ее в другие мои классы. Но когда я определяю @Component или @Named, я получаю много ошибок о Thread и Runnable.

Мой вопрос заключается в том, можно ли внедрить другую реализацию интерфейса, к которой у вас нет доступа, и ее коды реализации по умолчанию (в 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;
    }

    ...
}

1 Ответ

0 голосов
/ 27 марта 2020

Я сделал это. Для кого, возможно, понадобится его решение, я хочу поставить свой путь ...

Я расширил свой класс от реализации по умолчанию (вместо реализации интерфейса). Тогда я мог бы определить именованную аннотацию к нему.

@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;
    }

    ...
}
...