【发布时间】:2012-09-28 17:16:48
【问题描述】:
我有一个带有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 上下文文件的情况下实现
A接口的AutoWire类?
有可能吗?-
当我将 bean 的
scope从singlton更改为prototype如下:<bean id="b" class="org.iust.ce.me.B" scope="prototype"></bean>并实例化它的几个bean,只有在创建
context期间实例化的bean 是injected到AutoWired变量。为什么?
任何帮助将不胜感激。
【问题讨论】:
标签: java spring jakarta-ee ioc-container autowired