我使用Spring
和@Autowired
将实例注入我的主课程,但我失败了。
我有一个名为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
工作?