メインクラスにインスタンスを挿入するのに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使用法を知っていますか?それはあなたがメインのメソッドでコンテナからそのインスタンスを取得する必要があるコンテナにプッシュした後に、あなたがautowired要素をspringコンテナに置くことを意味します。 – Crabime