Stworzyłem usługę JAX-RS, w której chcę wstrzyknąć komponent o ograniczonej możliwości. Problem polega na tym, że fasola nie jest wstrzykiwana. Jak to się dzieje i jak mogę to rozwiązać?Nie można wstrzyknąć @ApplicationScoped bean w usłudze JAX-RS
usługa JAX-RS:
@Path("room")
public class RoomService {
@Inject
GameController gc;
public RoomService() {}
@Path("create")
@GET
@Produces("application/json")
public String create() {
Room r = new Room();
gc.addRoom(r); // gc is null
return r.toJson();
}
}
Zastosowanie scoped fasoli
import java.util.ArrayList;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import pepuch.multuplayergameserver.entity.Game;
import pepuch.multuplayergameserver.entity.Room;
@Named
@ApplicationScoped
public class GameController {
private Game game;
public GameController() {
this.game = new Game(new ArrayList<Room>());
}
public boolean addRoom(Room room) {
if (!game.getRooms().contains(room)) {
return game.getRooms().add(room);
}
return false;
}
}
Twój kod 'GameController' nie kompiluje się i również brakuje' @Name'. Proszę nie zapisywać nietestowanego kodu. Zamiast tego użyj prawdziwego i przetestowanego kodu. – BalusC
Naprawiłem to. Przepraszam. Dodałem '@Named', ale nadal nie działa. Myślę, że '@ Named' jest tylko dla' EL', dlatego nie dodałem tego wcześniej. – pepuch
Dlaczego @Named? Nie zrobi żadnej różnicy. –