Ich verwende Spring 3 AOP, und ich habe einen Aspekt, der Zugriff auf die HttpServletRequest erfordert. Es sieht etwa so aus:Spring AOP und Aspect Thread-Sicherheit für eine Autowired HTTPServletRequest Bean
@Aspect
public class MyAspect {
@Autowired
private HttpServletRequest httpServletRequest;
public void init() {
// Do something once...
}
@Before("my pointcut here...")
private void myMethod() {
// I need the httpServletRequest...
}
@After("my pointcut here...")
private void myOtherMethod() {
// I need the httpServletRequest...
}
}
Und wie folgt konfiguriert ist:
<bean id="myAspect" class="com.some.package.MyAspect" init-method="init" />
Ist die init-Methode nur einmal pro IoC-Container genannt, obwohl dies ein Aspekt ist, und ist die HttpServletRequest Thread-sicher ? Wenn dies nicht der Fall ist, was ist der beste Weg, um während der Ausführung des Hinweises darauf zu kommen und ihn threadsicher zu machen? Wenn es mir möglich ist, benutze ich keinen lokalen Thread.
Tom, das ist eine gute Antwort. Ist es möglich, dass Spring dies irgendwo dokumentiert hat, wo ich es nachlesen könnte? Es war sehr schwierig, etwas zu finden, das mit der Funktionsweise der Proxyfunktion zusammenhängt.Oh, und ich brauche keinen Zugriff auf die Anfrage von der init() - das war betrügt mich und drückte zwei Fragen in einem :) –
@BrianReindel: Ich Referenz in meiner Antwort auf die Frühlings-Dokumentation enthalten. –
Hallo Thomasz, wird der Code in Antwort funktionieren? Können Sie auch Ihre Meinung zu "http://stackoverflow.com/questions/22923813/set-systems-pro-controlling-and-access-that-in-an-aspect" abgeben? – riship89