我遇到一个问题,我无法在Spring中使用Embedded Tomcat 9.0.5添加请求bean
将启动应用程序的方法
public static void main(final String[] args) {
srv = new Tomcat();
srv.getConnector().setPort(port);
ctx = srv.addContext("", new File("").getAbsolutePath());
srv.addServlet(ctx, "testServlet", new TestServlet());
ctx.addServletMappingDecoded("/testServlet/*", "testServlet");
ctx.addApplicationListener(RequestContextListener.class.getName());
try {
srv.start();
} catch (LifecycleException e) {
e.printStackTrace();
}
}
的services.xml
<bean id="service" class="xxxx.xx.ServiceImpl" scope="request">
</bean>
当我在春季启动时启动apache时,我得到了关注:
|main|noSessionId|noCorrelationId|ERROR|NULL|null|java.lang.IllegalStateException: No Scope registered for scope name 'request'
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1342)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1249)
答案 0 :(得分:2)
Spring请求,会话,全局会话和应用程序范围适用于Spring Web应用程序。 Spring请求范围与HTTP请求有关。 Spring会话范围与HTTP会话有关。 Spring应用程序范围与ServletContext有关。 Spring全局会话范围与spring portlet应用程序有关。 这意味着我们不能在独立应用程序中使用这些范围。
Spring Doc中提到了以下内容:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes
请求,会话,应用程序和websocket范围仅限 如果您使用Web感知的Spring ApplicationContext,则可用 实现(例如XmlWebApplicationContext)。如果你使用这些 具有常规Spring IoC容器的范围,例如 ClassPathXmlApplicationContext,将出现IllegalStateException 抛出抱怨未知的bean范围。