当我调用getBean(name)
时BeanFactory
,我获得了在应用程序上下文中定义的bean的实例。但是,当我getBean(name)
再次调用(使用相同的名称)时,我又得到了相同的Bean实例。我了解在某些情况下(很多情况下)这是理想的选择,但是我如何告诉BeanFactory
给我一个新的实例呢?
Spring配置示例(通常…我省略了一些冗长的内容,但这应该可以理解):
<beans>
<bean id="beanA" class="misc.BeanClass"/>
</beans>
示例Java:
for(int i = 0;i++;i<=1) {
ApplicationContext context = ClassPathXmlApplicationContext("context.xml");
Object o = context.getBean("beanA");
System.out.println(o.toString()); // Note: misc.BeanA does not implement
// toString(), so this will display the OOID
// so that we can tell if it's the same
// instance
}
当我运行此程序时,我得到如下信息:
misc.BeanClass@139894
misc.BeanClass@139894
请注意,这两个对象具有相同的OOID …因此它们是相同的实例…但是我想要不同的实例。
您需要告诉spring您想要原型bean而不是单例bean
<bean id="beanA" class="misc.BeanClass" scope="prototype"/>
每个请求都会为您提供一个新实例。
问题内容: 假设我在Spring容器中定义了一个bean(例如BeanA),并且此bean被注入到对象中。(例如BeanAUser) 在运行时,我可以使用另一个bean实例替换spring容器中的原始BeanA吗?并且还将这个新的bean实例重新注入BeanAUser中以替换原始的BeanA吗? 问题答案: 使用代理可以轻松实现。创建接口的委派实现,并切换要委派的对象。
假设我有一个spring bean我想在整个应用程序中使用,但是因为它是遗留代码,所以我不能在或任何类型的bean中使用它,因为这个类是在整个项目中手动实例化的,所以我不能在我想要的地方自动地使用它。 我如何为一个我想要重用的spring bean创建一个包装器类,配置如下,这样它除了返回在应用程序上下文中注册的bean的实例之外什么都不做? 基本上,我正在寻找类似的方法,如: 这样,在我想使用M
问题内容: 我正在使用Oracle 11GR2,并且当varchar2字段为空时,在空字段上执行a 将显示在我的Eclipse控制台上。如何让它显示空字符串呢? 问题答案: 你的getter方法:
问题内容: 我正在尝试建立一个请求过滤器,该过滤器仅在与字母e和数字的模式匹配时才会使用。但是我似乎无法使其正常工作。每次尝试使用正则表达式时,我都会不断收到400个错误。 如果仅使用以下内容,它“有效”,但还会捕获没有我不需要的数字的映射。 我尝试了以下组合。 问题答案: 根据文档,您必须使用。甚至有一个例子:
问题内容: 返回一个类型列表。但是List是一个接口,那么如何实例化它呢?如果尝试并实例化一个类型化的列表,我会收到一条错误消息,指出这是不可能的。 编辑 没关系,我看到了怎么回事,只是被文档混淆了片刻。 问题答案: 这是一个不应该与混淆。它是数组的包装,这意味着您进行了任何更改,更改了原始数组,并且无法添加或删除条目。通常将其与ArrayList结合使用,例如
问题内容: 返回一个类型列表。但是List是一个接口,那么如何实例化它呢?如果尝试并实例化一个类型化的列表,我会收到一条错误消息,指出这是不可能的。 编辑 没关系,我看到了怎么回事,只是被文档混淆了片刻。 问题答案: 这是一个不应该与混淆。它是数组的包装,这意味着您进行了任何更改,更改了原始数组,并且无法添加或删除条目。通常将其与ArrayList结合使用,例如