Java 如何在Spring中使用请求范围?
我想将Java 如何在Spring中使用请求范围?,java,spring,spring-web,Java,Spring,Spring Web,我想将UriInfo包装到我的自定义查询对象中,并使其在其他Spring组件中可用。我可以用HK2这样做 package test.service; @Path("/test") public class TestResource { @Inject private Query query; @GET public String test() { return "found: " + query.toString(); } } 有合
UriInfo
包装到我的自定义查询对象中,并使其在其他Spring
组件中可用。我可以用HK2这样做
package test.service;
@Path("/test")
public class TestResource {
@Inject
private Query query;
@GET
public String test() {
return "found: " + query.toString();
}
}
有合适的工厂
更新web.xml
并向QueryFactory添加注释
@Component
@Scope("request")
public class QueryFactory implements FactoryBean<Query>
您是指实际web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际上是在web请求中操作,并且仍然收到此消息,那么您的代码可能是在外部运行的
DispatcherServlet/DispatcherPortlet:
在这种情况下,使用RequestContextListener或RequestContextFilter公开当前请求
可笑的是,我已经将RequestContextListener添加到web.xml中了
若运行时未设置ContextLoaderListener,则会在TestResource中获得NullPointerException,因为查询为null
我看不出有什么不对。你能告诉我这个配置应该如何正确完成吗?问题是你告诉Spring QueryFactory有一个请求范围
@Component
@Scope("request")
public class QueryFactory
这样,ObjEC只存在于Web请求的中间。但是您试图在web请求之外使用它
@Autowired
QueryFactory queryFactory;
您可以在异常中看到它
您指的是实际web之外的请求属性吗
请求
我得到异常,因为没有UriInfo。我想要这个东西。UriInfo不是我的类,但可用于web应用程序。您正在将QueryFactory注入SpringConfiguration类。此配置类在应用程序开始时初始化,它不是web请求的一部分。
package test.service;
@Path("/test")
@Component
public class TestResource {
@Autowired
private Query query;
@GET
public String test() {
return "found: " + query.toString();
}
}
@Component
@Scope("request")
public class QueryFactory implements FactoryBean<Query>
`java.lang.IllegalStateException: No thread-bound request found:`
@Component
@Scope("request")
public class QueryFactory
@Autowired
QueryFactory queryFactory;