我有一个带有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
在编程中确实是个好主意,我不想失去它。
现在我有两个问题!!
如何在不使用 xml 上下文文件的情况下
AutoWire
实现接口的类? 有可能吗?A
当我将
scope
bean 从singlton
更改prototype
为如下时:<bean id="b" class="org.iust.ce.me.B" scope="prototype"></bean>
并实例化它的几个bean,只有在创建过程中实例化的bean
context
才会injected
进入AutoWired
变量。为什么?
任何帮助将不胜感激。