アノテーション付きのインターフェースと、Component
それを次のように実装したいくつかのクラスがあります。
@Component
public interface A {
}
public class B implements A {
}
public class C implements A {
}
Autowired
また、次のような変数を持つクラスがあります。
public class Collector {
@Autowired
private Collection<A> objects;
public Collection<A> getObjects() {
return objects;
}
}
私のコンテキストファイルは次の定義で構成されています。
<context:component-scan base-package="org.iust.ce.me"></context:component-scan>
<bean id="objectCollector" class="org.iust.ce.me.Collector" autowire="byType"/>
<bean id="b" class="org.iust.ce.me.B"></bean>
<bean id="c" class="org.iust.ce.me.C"></bean>
そしてメインクラスには、次のようなコードがあります。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
B b = (B) context.getBean("b");
C c = (C) context.getBean("c");
Collector objectCollector = (Collector) context.getBean("objectCollector");
for (A object : objectCollector.getObjects()) {
System.out.println(object);
}
出力:
org.iust.ce.me.B@1142196
org.iust.ce.me.C@a9255c
これらのコードはうまく機能しますが、いくつかの理由で、xmlコンテキストファイルを使用したくありません。new
それに加えて、メソッドを使用するよりも、演算子を使用してオブジェクトを作成する方が好きgetBean()
です。それでも、AutoWiring
プログラミングでは本当に良いアイデアなので、失いたくありません。
今、私は2つの質問があります!!
xmlコンテキストファイルを使用せずにインターフェイスを
AutoWire
実装するクラスを作成するにはどうすればよいですか? それは可能ですか?A
scope
Beanのをからに変更すると、singlton
次 のprototype
ようになります。<bean id="b" class="org.iust.ce.me.B" scope="prototype"></bean>
そして、そのいくつかのBeanをインスタンス化します。作成
context
中にインスタンス化されたBeanのみが変数になります。なんで?injected
AutoWired
どんな助けでもありがたいです。