2016-08-14 54 views
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で動作させる方法はありますか?

答えて

-1

oracleClient静的変数が間違っていると宣言しました。@ AutoWiredはsetterメソッドと同等です。静的setterメソッドを実行する方法は、静的キーワードを削除する必要があります。

+0

いいえ、私は 'static'キーワードを削除しましたが、それでも動作しませんでした。私はsetter/getterメソッドをどこかに設定する必要がありますか? – Searene

+0

ああ、あなたは私を冗談していますか?あなたは@Autowired使用法を知っていますか?それはあなたがメインのメソッドでコンテナからそのインスタンスを取得する必要があるコンテナにプッシュした後に、あなたがautowired要素をspringコンテナに置くことを意味します。 – Crabime

関連する問題