Я настраиваю аутентификацию в моем 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, но пока ничего не получалось.