Jersey アプリケーションで HK2 コンテナーを使用しています。カスタム ファクトリ メソッドを使用して、HK2 コンテナーから注入されたインスタンスを取得する必要があります。例えば 、
// Here I declare the IOC binding.
public class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(Logger.class).to(ILogger.class).in(Singleton.class);;
bind(MySqlRepository.class).to(IRepository.class).in(Singleton.class);
}
}
public class MyApplication extends ResourceConfig {
public static ApplicationBinder binder ;
public MyApplication () {
binder = new ApplicationBinder();
register(binder);
packages(true, "com.myapplication.server");
}
}
これが私のコードです:
public class BusinessLogic
{
//@Inject
//ILogger logger ;
//Instead
ILogger logger = DependencyResolver .resolve(ILogger.class) // resolve will get ILogger from HK2 container
}
このようにする必要がある理由は、時々、依存関係を持つクラスを手動で割り当てるためです。このように、@Inject を使用するたびに null が返されます。たとえば、 new BusinessLogic() を使用すると、@Inject のロガーは null になります。ILogge を取得するには、ビジネスロジックもバインドし、IOC を使用する必要があります。
私はこのようなものが必要です:
public class DependencyResolver {
public static <T> T resolve(Class<T> beanClass){
return instance;
}
}
MyApplication に登録したインスタンスを取得するには、DependencyResolver を使用する必要があります。
助言がありますか。前もって感謝します...