1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
zero-di.md 3.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:28 85b9559

Внедрение зависимостей (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)

  1. Реализация класса

Целевой класс

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;
    // ......
}
  1. Интерфейс с уникальной реализацией

Определение интерфейса

public interface InjectStub {

}

Класс реализации

public class InjectInstance implements InjectStub {

}

Внедрить InjectStub -> InjectInstance

import jakarta.inject.Inject;

@Queue
public class InjectWorker {

    @Inject
    private transient InjectStub stub;
    // ......
}

Одно ограничение для этой ситуации заключается в том, что существует только одна реализация интерфейса InjectStub.

  1. Интерфейс с несколькими реализациями

Определение интерфейса

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.
  • Все точки внедрения основаны на некоторых частях JSR330, но не на всех.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/silentbalanceyh-vertx-zero.git
git@api.gitlife.ru:oschina-mirror/silentbalanceyh-vertx-zero.git
oschina-mirror
silentbalanceyh-vertx-zero
silentbalanceyh-vertx-zero
master