如何使用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的新手,希望我正确地格式化问题:))
来自@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静态字段中注入,但它们是邪恶的并且会使你的代码混乱。 所以只是让这个方法不是静态的。 对于我的示例中的静态关键字抱歉,它是复制和粘贴,当然它不适用于静态方法。