Внедрение зависимостей (JSR 330)
Чтобы избежать сложности взаимосвязей объектов, Zero также поддерживает простое внедрение зависимостей на основе JSR 330.
Способ Vert.x
Все специфические объекты vert.x можно внедрить следующим образом:
import jakarta.inject.infix.Mongo;
import jakarta.inject.infix.MySql;
import jakarta.ws.rs.BodyParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@EndPoint
public class InjectApi {
@MySql
private transient SQLClient sqlClient;
@Mongo
private transient MongoClient mongo;
// ......
}
В текущей версии Zero поддерживаются следующие объекты:
javax.inject.infix.@Mongo
: io.vertx.ext.mongo.MongoClient
javax.inject.infix.@MySql
: io.vertx.ext.sql.SQLClient
Общий способ (JSR 330)
Целевой класс
import io.vertx.ext.mongo.MongoClient;
import io.vertx.up.commune.Envelop;
import jakarta.inject.infix.Mongo;
public class InjectDao {
@Mongo
private transient MongoClient client;
public void async(final Envelop envelop) {
System.out.println(this.client);
}
}
Внедрить InjectDao
import jakarta.inject.Inject;
@Queue
public class InjectWorker {
@Inject
private transient InjectDao dao;
// ......
}
Определение интерфейса
public interface InjectStub {
}
Класс реализации
public class InjectInstance implements InjectStub {
}
Внедрить InjectStub -> InjectInstance
import jakarta.inject.Inject;
@Queue
public class InjectWorker {
@Inject
private transient InjectStub stub;
// ......
}
Одно ограничение для этой ситуации заключается в том, что существует только одна реализация интерфейса InjectStub.
Определение интерфейса
public interface InjectA {
}
Реализация класса
InjectB
import import jakarta.inject.Named;
@Named("NameInjectA")
public class InjectB implements InjectA {
}
InjectC
@Named
public class InjectC implements InjectA {
}
Внедрить InjectA -> InjectB
import io.vertx.up.annotations.Qualifier;
import jakarta.inject.Inject;
@Queue
public class InjectWorker {
@Inject
@Qualifier("NameInjectA")
private transient InjectA injectA;
Для установки того, какая реализация должна быть внедрена, можно использовать @Qualifier
.
Правила
singleton
, не следует внедрять объекты значений и POJO.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )