代码之家  ›  专栏  ›  技术社区  ›  Pratik Singhal

如何在没有web的情况下使用带spring的tomcat。xml?[已关闭]

  •  4
  • Pratik Singhal  · 技术社区  · 7 年前

    我在Tomcat 7上部署了一个JAX-RS应用程序。我正在Tomcat上部署应用程序,没有任何 web.xml 文件

    我想使用spring在我的项目中注入一些依赖项。我没有使用任何 XML 文件来配置bean,相反,我创建了一个类并用 @Configuration 注释,其中包含所有bean定义。现在,我试图通过在一个单独的类中用 @Autowired ,但字段是 null .

    我应该如何使spring使用此设置?

    编辑: 通过创建一个 网状物xml

    <web-app>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    </web-app>
    

    我检查了tomcat日志,并验证了bean是由spring创建的。但问题是,当我尝试使用该bean时,类中的字段为null。

    4 回复  |  直到 7 年前
        1
  •  2
  •   Naresh Joshi    7 年前

    您可能想要使用 Spring Boot ,这有助于开发web应用程序,就像开发可以“只运行”的独立应用程序一样简单。

    根据Spring Boot的官方网站,您可以创建

    • 创建独立的Spring应用程序
    • 直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)
    • 尽可能自动配置Spring
    • 提供生产准备功能,如指标、健康检查和外部化配置
    • 绝对没有代码生成,也不需要XML配置

    你只需一个小时就能学会。我发现这段YouTube视频非常有趣 Getting Started with Spring Boot .

        2
  •  0
  •   Vineet Kasat    7 年前

    网状物当tomcat容器启动时,xml被用作起点。 如果你想绕过这一点,你可以编写一个简单的Java程序,在main()函数中调用Spring来加载应用程序上下文,并提供你的应用程序上下文的路径。

    更多详细信息: https://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

        3
  •  0
  •   Domo    7 年前

    如果你想在类中使用@Autowired,它首先必须是一个Bean。您可以通过使用@Component注释类或在配置中使用@Bean注释来实现这一点。

    @Bean
    Yourclass yourclass(){
         return new YourClass();
    }
    

    其次,您必须将@ComponentScan注释添加到配置中。

    @ComponentScan("your.package")
    @Configuration
    

    第三,必须实例化ApplicationContext。比如像这样

    JavaConfigApplicationContext context = new JavaConfigApplicationContext(YourConfig.class);
    

    WebApplicationInitializer ,在那里实现自己的并初始化上下文。

        4
  •  0
  •   Dimitri    7 年前

    您需要实现接口 WebApplicationInitializer 在这个类中,您传递了应用程序所需的所有Java配置。

    你必须定义 AnnotationConfigWebApplicationContext 您可以在其中注册配置类:

    context.register(MyConfig.class);
    

    context.setConfigLocation("com.example.app.config");
    

    完整示例:

        public class MyWebAppInitializer implements WebApplicationInitializer {
        @Override
        public void onStartup(ServletContext container) {
            AnnotationConfigWebApplicationContext context
              = new AnnotationConfigWebApplicationContext();
            context.setConfigLocation("com.example.app.config");
    
            container.addListener(new ContextLoaderListener(context));
    
            ServletRegistration.Dynamic dispatcher = container
              .addServlet("dispatcher", new DispatcherServlet(context));
    
            dispatcher.setLoadOnStartup(1);
            dispatcher.addMapping("/");
        }
    }
    

    最后一件事,如果使用maven,不要忘记设置属性 failOnmissingwebxml false pom.xml .

    你可以找到更多信息 here