2016-03-19 4 views
0

Ich entwerfe eine Webapp und würde es vorziehen, context.getBean() in meinem Einstiegspunkt zum Dienst nicht aufrufen zu müssen.Wie kann man verhindern, dass Spring Beans aus dem Anwendungskontext in webapp abgerufen wird?

Idealerweise möchte ich @Autowire Bohnen, aber das funktioniert nicht für mich.

Die JUnit-Tests sind in der Lage, die Autowired-Beans gut zu sehen, aber die Web-Anwendung ist nicht in der Lage.

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

Ich will nicht, um den Kontext bekommen haben und tun context.getBean() jedes Mal, wenn eine Web-Anfrage kommt - Ich hatte gehofft, der @Autowire würde mir erlauben, auf die Bohne zuzugreifen.

Ich legte Spring in Debug und es heißt, die Bohne ist erstellt, so dass ich nicht sicher bin, was los ist.

Ich habe gesehen, Web-Anwendungen dies mit statischen Variablen tun, aber ich möchte keine der Beans statisch machen, also versuche ich es auch zu vermeiden.

Irgendwelche Ideen, was ich falsch mache?

BEHOBEN! Nach dem Lesen der folgenden JIRA konnte ich es lösen. https://jira.spring.io/browse/SPR-9786

Antwort

0

Sind Ihre Beans mit @Component annotiert?

+0

Danke für den Vorschlag. Ich habe der Konfigurationsklasse und der Serviceklasse @Component hinzugefügt. Es ist bereits in der Controller-Klasse. Es schien jedoch nicht den Trick zu machen. –

+0

Erhalten Sie eine spezifische Fehlermeldung? –

+0

Ein anderer Vorschlag - obwohl das wahrscheinlich nichts ist - ist, dass Sie eine seltsame Schreibweise von "service.myservicecontroller" haben (das o fehlt). Ist das beabsichtigt? –

Verwandte Themen