Wie kann ich Spritzen lokalen Variablen eine statische Methode in eine abstrakte Klasse mit Spring?
Ich bin neu auf Frühling und lief in dieses problem.Ich habe versucht mit @Autowired auf die Methode, aber es hat nicht funktioniert,auf die Variablen bekomme ich die Fehlermeldung "Die annotation @Autowired nicht zulässig ist, für diesen Standort" von eclipse.
Ich habe die erforderlichen beans erstellt, die in der xml.
Unten ist der code, der diese Methode in einer abstrakten Klasse..
private static HttpResponse rawExecuteReqeust(HttpUriRequest request) throws ClientProtocolException, IOException {
HttpClient client = new DefaultHttpClient();
ProxyInterface proxyI; //needs to be Injected
User user; //needs to be Injected
System.out.println("About to execute " + request.getMethod() + " request on "
+ request.getURI());
if (proxyI.getProxyHost() != null && proxyI.getProxyPort() != 0) {
if (user.getProxyUser() != null && user.getProxyPassword() != null) {
((AbstractHttpClient) client).getCredentialsProvider().setCredentials(
new AuthScope(proxyI.getProxyHost(), proxyI.getProxyPort()),
new UsernamePasswordCredentials(user.getProxyUser(), user.getProxyPassword()));
}
HttpHost proxy = new HttpHost(proxyI.getProxyHost(), proxyI.getProxyPort(), "http");
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
HttpResponse response = client.execute(request);
return response;
}
(p.s Im neuen zu stackOverflow und hoffe, formatierte ich die Frage richtig 🙂 )
- was, die Sie wollen zu injizieren? Sie kann nicht Spritzen, ein Verfahren mit Autowired.
- Könnten Sie bitte geben Sie einige weitere Beispiel-code?
- Ich möchte injizieren der Abhängigkeiten von proxyI und Benutzer
- Definieren Sie die Variablen außerhalb der Methode und @Autowire Sie und nicht die Methode. Machen Sie privat, wenn Sie wollen, Sie zu verstecken.
- viele verschiedene Objekte werden mit dieser Methode mit verschiedenen Werten für Benutzer und proxy,wird das irgendwelche Probleme verursachen?
- Wenn die Bohne, wo diese Methode definiert ist, definiert ist, mit der
scope=prototype
und diese Methode ist nicht static, dann sollte es in Ordnung sein, seit dem Frühjahr container gibt eine neue Instanz von dieser bean jedes mal, es wird beantragt werden, was bedeutet, dass die verschiedenenUser
undProxyInterface
Objekte nicht gegenseitig überschreiben, da Sie sich in verschiedenen Instanzen. - Vielen Dank 🙂
- Ich habe versucht, was du gesagt hast, aber da die Methode statisch ist, die feilds müssen auch statisch für die Methode,Sie zu nutzen, und es scheint, dass ich kann nicht autowire statische feilds?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es möglich für Sie zu machen
user
undproxyI
in statische Eigenschaften können Sie injizieren Sie durch die Nutzung der MethodInvokingFactoryBean. Sie müssen eine statische setter-Methode. Um Ihnen eine Idee der Konfiguration:Aus der Dokumentation der
@Autowired
Wie Sie sehen, gibt es keine lokalen Variablen. Also Eclipse hat Recht. Und in Java kann man nicht kommentieren lokale Variablen mit anderen annotation. Es ist überhaupt nicht möglich.
So haben Sie zwei Möglichkeiten:
Stellen Feld Benutzer und Spritzen Sie Ihre Benutzer da.
Machen eine Art von UserService, die Sie Benutzer-Objekte
Alles sehr gut bedeckt ist Spring-Dokumentation. Nach der Lektüre, es wäre alles viel klarer für Sie.
UPD:
Stellte sich heraus, dass mit java 8 KÖNNEN Sie Anmerkungen auf Ihrem lokalen Variablen. Ich wollte nicht sehen, tief in es hinein, aber es wird nicht helfen, weil der Frühling nicht diese Art von Ziel-und die meisten wahrscheinlich, dass diese Anmerkungen werden nicht geben Ihnen Zugriff auf lokale variable Wert.
UPD2
Nein, Spring nicht erlaubt, Sie zu injizieren von Abhängigkeiten in statischen Feldern. Es gibt einige workarounds, wie Spritzen, setter-und innen-Einrichter-set statisches Feld, aber Sie sind böse und Chaos Sie code auf. So einfach stellen Sie diese Methode nicht statisch. Und sorry für das statische-Schlüsselwort in meinen Beispielen war es kopieren und einfügen und natürlich, es würde nicht funktionieren mit statischen Methode.