@Autowired没有工作,但getBean工作

时间:2016-08-14 01:33:57

标签: java spring dependency-injection

我使用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工作?

0 个答案:

没有答案