在接受参数的方法上使用依赖项时,如何在Jersey中注入依赖项?

时间:2020-07-09 14:57:37

标签: java rest dependency-injection jersey

我试图使用@Inject来注入依赖项,而不是使用静态关键字。 在其中一种方法上使用@Inject时,我在运行Java应用程序时得到了UnsatisfiedDependencyException

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();
    }

我使用AbstractBinderJustInTimeInjectionResolver注册所需的类文件。我想通过REST API公开添加的用户。

0 个答案:

没有答案