Класс конечной точки REST выглядит следующим образом:
Код: Выделить всё
@Path("/userAPI")
public class UserAPI {
@Inject
private UserDAO userDAO;
@GET
@Path("/{userId}")
public Response getUser(@PathParam("userId") String userId) {
User targetUser = userDAO.getUser(userId);
return Response.ok().build();
}
}
Код: Выделить всё
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class UserDAO {
private static final Logger logger = Logger.getLogger(UserDAO.class.getName());
private String creationDate = LocalDateTime.now().toString();
public UserDAO() {
logger.info(creationDate + "> Instance of UserDAO created: " + this.getClass().getName());
}
public User getUser(String userID) {
return new User("Hello", "World");
}
}
Код: Выделить всё
com.my.project.dao.UserDAO
2024-07-02T15:58:56.782817700> Instance of UserDAO created: com.my.project.dao.UserDAO
com.my.project.dao.UserDAO
2024-07-02T15:58:56.882009> Instance of UserDAO created: com.my.project.dao.UserDAO$Proxy$_$$_WeldClientProxy
com.my.project.dao.UserDAO
2024-07-02T15:58:56.941968900> Instance of UserDAO created: com.my.project.dao.UserDAO
com.my.project.dao.UserDAO
2024-07-02T16:13:54.397002400> Instance of UserDAO created: com.my.project.dao.UserDAO
Однако, судя по журналам, это не работает. Кажется, при каждом отдельном запросе я получаю новый экземпляр UserDAO со свежим значением CreationDate. Если бы DI работал правильно, я бы ожидал, что каждый последующий вызов будет возвращать одно и то же значение CreationDate.
В файле журнала ошибок нет, и я думаю, что у меня есть все необходимые зависимости настроены в файле build.gradle для включения CDI в Tomcat 9:
Код: Выделить всё
dependencies {
implementation group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1.1'
// Jersey 2.41 (compatible with Tomcat 9)
implementation 'org.glassfish.jersey.core:jersey-server:2.41'
implementation 'org.glassfish.jersey.media:jersey-media-json-jackson:2.41'
implementation 'org.glassfish.jersey.containers:jersey-container-servlet:2.41'
implementation group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.41'
implementation group: 'org.glassfish.jersey.ext.cdi', name: 'jersey-cdi1x', version: '2.41'
// Weld
implementation group: 'org.jboss.weld.servlet', name: 'weld-servlet-shaded', version: '3.1.9.Final'
}
Код: Выделить всё
MYPROJECT
org.jboss.weld.environment.servlet.Listener
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/786 ... -instances