2016-04-15 8 views
1

Ich verwende Struts2 mit Spring für Abhängigkeits-Injektionen.Inject HttpServletRequest (von Struts2 Aktion implementieren ServletRequestAware) in Eigenschaft mit Spring

Ich habe Struts Aktion A aus dem ich HttpServletRequest und eine Abhängigkeit B im Inneren zugreifen:

public class A extends ActionSupport implements ServletRequestAware { 
    private B b; 
    private HttpServletRequest request; 

    @Override 
    public void setServletRequest(HttpServletRequest httpServletRequest) 
    { 
     this.httpServletRequest = httpServletRequest; 
    } 

    public B getB() { 
     return this.b; 
    } 

    public void setB(B b) { 
     this.b = b; 
    } 
} 

Es gibt auch application-context.xml:

<bean id="b" class="com.example.B" /> 
<bean id="a" class="com.example.actions.A"> 
    <property name="b" ref="b" /> 
</bean> 

Das Programm funktioniert, aber hier ist mein Problem : Abhängigkeit B erfordert HttpServletRequest, um ordnungsgemäß zu funktionieren. Gibt es eine Möglichkeit für Spring, es in B zu injizieren? Im Moment müsste ich das Objekt HttpServletRequest manuell an Methoden übergeben, die es erfordern.

Antwort

1

Gibt es eine Möglichkeit für den Frühling in B zu injizieren?

Ja, aber B sollte Anfrage Bereich sein.

Sie übergeben das Anfrageobjekt, das Sie von Struts erhalten haben, aber Ihre Aktionen werden von Spring verwaltet, und Sie möchten Spring DI verwenden, um HttpServletRequest Objekt zu injizieren? Sie können nur Objekte injizieren, die über RequestAttributes an den Thread gebunden sind.

Sie können dieses Objekt nur injizieren, wenn es für Spring verfügbar ist. Sie können das Anforderungsobjekt auf andere Weise erhalten, aber die Injektion funktioniert nur im entsprechenden Bereich.