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