我正在设计一个webapp,我宁愿不必在我的服务入口点内调用context.getBean()。
理想情况下,我想@Autowire bean,但这不适合我。
JUnit测试能够很好地看到Autowired bean,但Web应用程序却没有。
的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring/serviceContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</listener-class>
</listener>
serviceContext.xml
<context:annotation-config/>
<context:component-scan base-package="service.myservice"/>
ApplicationConfiguration.java
@Configuration
@ComponentScan(basePackages={"service.myservicecontrller"})
public class ApplicationConfiguration {
@Autowired ServiceController controller;
}
MyService.class
@WebService(<snipped this out>)
@BindingType("http://schemas.xmlsoap.org/wsdl/soap/http")
public class MyService extends ServiceBase implements ApplicationContextAware {
/** The context. */
@Resource
WebServiceContext context;
@Autowired
ServiceController controller;
public doFeature(...) { return controller.getTimeout();} <----- this is where the NPE is
ServiceController.java
@Component
public class ServiceController {
public int timeout = 100;
public void setTimeout(int t) {
this.timeout = t;
}
public int getTimeout() { return this.timeout; }
public ServiceController(){}
}
每次Web请求进入时,我都不想获取上下文并执行context.getBean() - 我希望@Autowire允许我访问bean。
我把Spring放在Debug中,它说bean已经创建了,所以我不确定是怎么回事。
我已经看到网络应用使用静态变量执行此操作,但我不想让任何bean静态,所以我也试图避免这种情况。
任何想法我做错了什么?
已解决!阅读以下JIRA后,我能够解决它。 https://jira.spring.io/browse/SPR-9786
答案 0 :(得分:0)
您的bean是否使用@Component进行注释?