0
我使用Spring
和@Autowired
注入一個實例到我的主類,但我失敗了。@Autowired不工作,但getBean工程
我有一個名爲OracleClient
的接口,一個名爲OracleClientImpl
的類實現了前者的接口,它們的內容如下。
OracleClient的
public interface OracleClient {
void doSomething();
}
OracleClientImpl
@Service("oracleClient")
public class OracleClientImpl implements OracleClient {
@Override
public void doSomething() {
System.out.println("doSomething");
}
}
而且我已經在我的Spring配置文件中添加如下幾行:
<context:annotation-config/>
<context:component-scan base-package="com.company" />
我主要的類看起來像這樣:
public class App {
@Autowired
private static OracleClient oracleClient;
public static void main(String[] args) throws IOException {
ApplicationContext cxt = new ClassPathXmlApplicationContext("spring-config.xml");
oracleClient.doSomething();
}
}
它不工作,oracleClient
在這種情況下null
。但如果我嘗試使用代碼而不是@Autowired
代替bean,則將成功注入oracleClient
。
public class App {
public static void main(String[] args) throws IOException {
ApplicationContext cxt = new ClassPathXmlApplicationContext("spring-config.xml");
OracleClient oracleClient = (OracleClientImpl) cxt.getBean("oracleClient");
oracleClient.doSomething();
}
}
我想知道爲什麼。有沒有辦法讓它通過@Autowired
工作?
不,我刪除了'static'關鍵字,但它仍然不起作用。我需要在某處設置setter/getter方法嗎? – Searene
哦,夥計,你在開玩笑嗎?你知道@Autowired的用法嗎?這意味着你將自動裝配的元素放到spring容器中。在你將它推入容器之後,你仍然需要從main方法的容器中獲取它的實例。 – Crabime