アノテーションを使用してルックアップメソッドインジェクションを使用する方法はありますか?
次のクラスがあるとします。
@Service
public abstract class A {
protected abstract createB();
}
それを機能させるには、SpringapplicationContext.xmlで次のように宣言する必要があります。
<bean id="b" class="com.xyz.B">
</bean>
<bean id="a" class="com.xyz.A">
<lookup-method name="createB" bean="b"/>
</bean>
<context:component-scan base>
を使用していますが、XMLでも宣言する必要があります。良いアプローチではないと思います。
アノテーションでそれを行う方法は?
javax.inject.Provider
を使用することができます。すべての感謝は Phil Webb に行きます。
public class MySingleton {
@Autowired
private Provider<MyPrototype> myPrototype;
public void operation() {
MyPrototype instance = myPrototype.get();
// do something with the instance
}
}
Spring APIについていく場合は、org.springframework.beans.factory.ObjectFactory
でも可能です。
public class MySingleton {
@Autowired
private ObjectFactory<MyPrototype> myPrototypeFactory;
public void operation() {
MyPrototype instance = myPrototypeFactory.getObject();
// do something with the instance
}
}
詳細については、 ドキュメント をご覧ください。
Spring> = 4.1でのみ実装されます ticket を参照してください。
最後に @ Lookup アノテーションとして導入されました。使い方は discussion です。