我在Tomcat 7上部署了一个JAX-RS应用程序。我在Tomcat上部署应用程序而没有任何web.xml
文件。
我想使用spring来注入项目中的一些依赖项。我没有使用任何XML
文件来配置bean,而是创建了一个类并使用@Configuration
注释对其进行了注释,该注释包含所有bean定义。现在,我试图通过使用@Autowired
在单独的类中注释一个字段来使用该bean,但该字段为null
。
如何使用此设置进行弹簧工作?
编辑:
我能够通过在WEB-INF /中创建web.xml
来初始化spring应用程序上下文。具有以下内容。
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
我检查了tomcat日志,并验证了bean是由spring创建的。但问题是当我尝试使用该bean时,该类中的字段为空。
答案 0 :(得分:2)
您可能希望使用Spring Boot,这可以帮助您开发Web应用程序,就像开发一个可以“运行”的独立应用程序一样简单。
根据Spring Boot的官方网站,您可以创建
您可以在1小时内了解到这一点我发现此YouTube视频非常有趣,只需Getting Started with Spring Boot。
答案 1 :(得分:0)
web.xml用作tomcat容器启动时的起点。 如果你想绕过这个,你可以编写一个简单的Java程序,在main()函数中只需调用Spring来加载应用程序上下文并提供应用程序applicationContext的路径。
更多详情:https://www.tutorialspoint.com/spring/spring_java_based_configuration.htm
答案 2 :(得分:0)
如果你想在一个类中使用@Autowired,它首先必须是一个Bean。您可以通过使用@Component注释Class或在Configuration中使用@Bean Annotation来完成此操作。
@Bean
Yourclass yourclass(){
return new YourClass();
}
其次,您必须将@ComponentScan Annotation添加到配置中。
@ComponentScan("your.package")
@Configuration
第三,您必须实例化ApplicationContext。例如像这样
JavaConfigApplicationContext context = new JavaConfigApplicationContext(YourConfig.class);
因为它是一个Web应用程序,所以最好看一下WebApplicationInitializer,实现自己的并在那里初始化Context。
答案 3 :(得分:0)
您缺少的是初始化Spring Dispatcher Servlet的方法。
您需要实现接口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