Как внедрить зависимость в Джерси, используя ее в методе, который принимает аргументы? - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь использовать @Inject для внедрения зависимостей вместо использования ключевых слов stati c. При использовании @Inject в одном из методов я получаю UnsatisfiedDependencyException при запуске приложения java.

UserDao

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

public class UserDao {
    
    public UserDao() {
    }

    private List<String> users = new ArrayList<String>();
    
    public List<String> getUsers() {
        return users;
    }

    public void setUsers(List<String> users) {
        this.users = users;
    }

    public void addUser(final String user){
        users.add(user);
    }

    @Inject
    public void populateUsers(final String name){
        addUser(name);
    }
}

UserService

import java.util.List;

import javax.inject.Inject;

public class UserService {
    
    @Inject
    private UserDao userDao;
    
    public UserService() {
    }


    public List<String> getNames() {
        return userDao.getUsers();
    }
}

UserResource

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
    @Path("users")
    public class UserResource {

@Inject
public UserService userService;

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getNameList() throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    String writeValueAsString = objectMapper.writeValueAsString(this.userService.getNames());
    return Response.ok(writeValueAsString).build();
}

}

JerseyApplication

public static void main(String[] args) throws Exception {
        UserDao greetingDao = new UserDao();
        greetingDao.populateUsers("SampleUser");
        new JerseyApplication().start();
    }

Используя AbstractBinder и JustInTimeInjectionResolver, я регистрирую необходимые файлы классов. Я хочу выставить добавленных пользователей через REST api.

...