2016-03-19 1 views
0

Я разрабатываю webapp, и я бы предпочел не называть context.getBean() внутри моей точки входа в службу.Как избежать извлечения весенних бобов из контекста приложения в webapp?

В идеале я хотел бы использовать @Autowire beans, однако это не работает для меня.

Тесты JUnit могут видеть, что Autouired beans просто отлично, но веб-приложение - нет.

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(){} 
} 

Я не хочу, чтобы получить контекст и сделать context.getBean() каждый раз, когда веб-запрос приходит - Я надеялся, что @Autowire позволит мне получить доступ к bean-компоненту.

Я положил Spring в Debug, и он говорит, что компонент создан, поэтому я не уверен, что происходит.

Я видел, как веб-приложения делают это с помощью статических переменных, но я не хочу ставить какой-либо из bean-компонентов, поэтому я также стараюсь избегать этого.

Любые идеи, что я делаю неправильно?

RESOLVED! Прочитав следующую JIRA, я смог ее решить. https://jira.spring.io/browse/SPR-9786

ответ

0

Ваши бобы, аннотированные @Component?

+0

Спасибо за предложение. Я добавил @Component в класс конфигурации и класс сервиса. Он уже находится в классе Controller. Однако, похоже, это не трюк. –

+0

Вы получаете сообщение об ошибке? –

+0

Другое предложение - хотя это, вероятно, ничего, - это то, что у вас есть странное написание «service.myservicecontrller» (отсутствует o). Это намеренно? –