Я разрабатываю 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
Спасибо за предложение. Я добавил @Component в класс конфигурации и класс сервиса. Он уже находится в классе Controller. Однако, похоже, это не трюк. –
Вы получаете сообщение об ошибке? –
Другое предложение - хотя это, вероятно, ничего, - это то, что у вас есть странное написание «service.myservicecontrller» (отсутствует o). Это намеренно? –