pep*_*uch 5 jax-rs java-ee cdi
我已经创建了JAX-RS服务,我想在其中注入一个应用程序范围的bean.问题是没有注入豆子.这是怎么造成的,我该如何解决?
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();
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序作用域bean
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要将bean设置为托管资源,以使其符合注入条件.至少,添加@RequestScoped到JAX-RS SIB以使其注入价值.
另一种替代注释是@ManagedBean.关键是,如果父bean不在托管上下文中,Jersey将无法解决所需的注入目标
import javax.enterprise.context.RequestScoped
@RequestScoped
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:确保在WEB-INF文件夹中有一个beans.xml文件.您的beans.xml文件将类似于:
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
Run Code Online (Sandbox Code Playgroud)
编辑:基于此JIRA,您可以替换@RequestScoped为@ManagedBean
| 归档时间: |
|
| 查看次数: |
6762 次 |
| 最近记录: |