私のアプリケーションでサードパーティのライブラリを使用しています。彼らは私のプロジェクトでmavenを使って追加したラッパーを提供しました。このラッパーを使用するには、クライアントクラスにアクセスキーを与えてその機能を使用する必要があります。例の場合:私が欲しいものスプリング管理対象コンポーネントにサードパーティのライブラリを自動配線する
final WeatherApiService was = new WeatherApiServiceImpl(accessKey);
final WeatherApiClient weatherApiClient = new WeatherApiClient(was);
は、私はちょうどWeatherApiClientをautowireことができるように(それはシングルトンのようなものだとアプリケーションが起動しているときに春のコンテキストに登録されなければならないので)上記のコードを削除して、何かをすることです私たちは行くのが良いです。 (ラッパーはFYIを使用していません)。以下は、私が行ったことは、私の春のコンテキストでは、私は2つの豆を登録し、アクセスキーを置くweb.xmlです。
春-のcontext.xml
<bean id="was" class="my.librarypath.WeatherApiService ">
<constructor-arg type="java.lang.String" value="${accessKeyFromWebXml}"/>
</bean>
<bean id="weatherApiClient" class="my.librarypath.WeatherApiClient">
<constructor-arg type="my.librarypath.WeatherApiService" value="was"/>
</bean>
私は右のそれをやっている場合
@Component("myComponent")
public class MyComponent IComponent {
@Resource(name = "weatherApiClient") // <--- getting Error here i.e: Couldn't aurtowire, bean should be of String type
private String weatherApiClient;
public void myFunction() {
weatherApiClient.getWeather();
}
}
サードパーティのライブラリを使用します私のコンポーネントは、誰かが確認することができます利用可能なベストプラクティスオプションがありますか?
<bean id="weatherApiClient" class="my.librarypath.WeatherApiClient">
<constructor-arg type="my.librarypath.WeatherApiService" value="was"/>
// ^---- should be ref
</bean>
第二に、私はString
代わりのWeatherApiClient
を使用していました:
とあなたのタイプが間違っています。だからあなたは正しいことをしていません。 –
エラーに加えてD.Deinum:あなたは新しいWeatherApiServiceImpl(accessKey)を使用します。を使ってそれを作成しようとしましたか? WeatherApiServiceがインタフェースである場合、これは動作しません。あなたのコードのようにimplクラスを使うべきです。 –
Starbax
はい@starbax正しいです。ご協力いただきありがとうございます。それはMによって言われるように修正されました。それは主要な問題でした。 – ManinGreen