如何避免在webapp中从应用程序上下文中检索spring bean?

时间:2016-03-19 16:23:00

标签: java spring spring-mvc javabeans autowired

我正在设计一个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

1 个答案:

答案 0 :(得分:0)

您的bean是否使用@Component进行注释?