RestTemplateを使用して自動配線することができました。ただし、コードの残りのテンプレート関連部分を次のように別のクラスに移動したいと思います。
public class Bridge {
private final String BASE_URL = "http://localhost:8080/u";
@Autowired
RestTemplate restTemplate;
public void addW() {
Map<String, String> x = new HashMap<String, String>();
W c = restTemplate.getForObject(BASE_URL + "/device/yeni", W.class, x);
System.out.println("Here!");
}
}
そして別のクラスで私はそれを呼びます:
...
Bridge wb = new Bridge();
wb.addW();
...
私はSpringとDependencyInjectionの用語に不慣れです。私のrestTemplate
変数はnullであり、例外をスローします。それを解決する方法は何ができますか(new
キーワードを使用することに関連しているかどうかはわかりません)?
Bridge wb = new Bridge()
の使用は、依存性注入では機能しません。 restTemplate
はSpringによって管理されていないため、wb
は注入されません。
Bridge
をSpringBean自体にする必要があります。注釈による:
@Service
public class Bridge {
// ...
}
またはBean宣言による:
<bean id="bridge" class="Bridge"/>
Jehaの正解にさらに追加するだけです。
現在、
Bridge wb = new Bridge();
つまり、そのオブジェクトインスタンスは「SpringManaged」ではありません。春はそれについて何も知りません。では、どうすればそれが何も知らない依存関係を注入できるのでしょうか。
だからジェハが言ったように。 @Serviceアノテーションを追加するか、アプリケーションコンテキストxml構成ファイルで指定します(または、Spring 3を使用している場合は、@ Configuration オブジェクト)
次に、Springコンテキストが起動すると、BeanFactoryにBridge.classのシングルトン(デフォルトの動作)インスタンスがあります。それを他のSpring-Managedオブジェクトに挿入するか、手動で引き出します。
Bridge wb = (Bridge) applicationContext.getBean("bridge"); // Name comes from the default of the class
これで、依存関係が組み込まれます。
新しい演算子を使用し、すべての依存性を注入したい場合は、これをSpringコンポーネントにするのではなく(@Serviceでアノテーションを付けることにより)、@ Configurableクラスにします。
このようにして、オブジェクトでさえ、新しい演算子の依存関係によってインスタンス化されます。
構成もほとんど必要ありません。詳細な説明とサンプルプロジェクトは ここ です。
http://spring-framework-interoperability.blogspot.in/2012/07/spring-managed-components.html