@Inject не работает в Singleton, но работает в классах API - PullRequest
0 голосов
/ 22 марта 2019

Я настраиваю аутентификацию в моем Jetty API. И я хотел использовать внедрение зависимостей, чтобы внедрить класс с функциями базы данных в класс, который проверяет предоставленный токен в базе данных.

Я уже использовал внедрение зависимостей в своих классах API следующим образом:

@Path("/account")
@Api(value = "/account", description = "Web Service for accounts")
public class AccountService {

    @Inject
    private IAccountRepo accountRepo;
}

Чтобы сделать эту работу, я создал класс, который связывает реальный класс с интерфейсом.

public class RepositoryBinder extends AbstractBinder {

    @Override
    protected void configure() {
        bind(MovieRepo.class).to(IMovieRepo.class);
        bind(AccountRepo.class).to(IAccountRepo.class);
    }
}

Я зарегистрировал это так:

ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages(
        MovieService.class.getPackage().getName(),
        AccountService.class.getPackage().getName(),
        ApiListingResource.class.getPackage().getName()
);
resourceConfig.register(new RepositoryBinder());
resourceConfig.register(new AuthenticationFilter());
resourceConfig.register(ObjectMapperContextResolver.class);

Но когда я пытаюсь использовать его в своем классе TokenValidator, accountRepo всегда имеет значение null.

Мой TokenValidator выглядит так:

@Singleton
public class TokenValidator implements ITokenValidator {

    @Inject
    private IAccountRepo accountRepo;

    private static ITokenValidator instance = null;

    private TokenValidator() {
    }

    public static ITokenValidator getInstance() {
        if (instance == null) {
            instance = new TokenValidator();
        }
        return instance;
    }

    //Some token validation logic here
}

Я ожидал, что @Inject сработает сразу, но это не так. Я уже пробовал кучу вещей, таких как регистрация TokenValidator таким же образом, как регистрируются классы API, но пока ничего не получалось.

...