如何使用Spring在抽象类中注入静态方法的局部变量?

我是Spring的新手并且遇到了这个问题。我尝试在方法上使用@Autowired但是它没有工作,对于变量我从eclipse得到错误“注释@Autowired不允许这个位置”。 我在xml中创建了所需的bean。

下面是代码,这个方法在一个抽象类中。

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; } 

(ps我是stackOverflow的新手,希望我正确地格式化问题:))

如果您可以将userproxyI转换为静态属性,则可以使用MethodInvokingFactoryBean注入它们。 您必须提供静态setter方法。 为了让您了解配置:

          

来自@Autowired的文档

将构造函数,字段,setter方法或配置方法标记为由Spring的dependency injection工具自动assembly。

如您所见,没有局部变量。 所以Eclipse是对的。 在Java中,您无法使用任何其他注释来注释局部变量。 根本不可能。

所以你有两个选择:

创建现场用户并将用户注入其中。

 public class Test { @Autowired private User user; private HttpResponse rawExecuteReqeust(){ // do something with field user } } 

制作某种UserService,它将为您提供用户对象

 public class Test { @Autowired private UserService userService; private HttpResponse rawExecuteReqeust(){ User user = userService.getUser(); // do something with local variable user } } 

所有这些非常好的内容是Spring文档。 阅读完之后,一切都会更加清晰。

UPD:事实certificate,使用java 8,您可以在本地变量上添加注释。 我没有深入了解它,但它没有帮助,因为spring不使用这种类型的目标,并且很可能这个注释不会让你访问本地变量值。

UPD2不,Spring不允许您将依赖项注入静态字段。 有一些解决方法,比如在setter和内部setter set静态字段中注入,但它们是邪恶的并且会使你的代码混乱。 所以只是让这个方法不是静态的。 对于我的示例中的静态关键字抱歉,它是复制和粘贴,当然它不适用于静态方法。