Spring 带参数的原型 bean?
Spring prototype beans with parameters?
是否可以使用 XML 配置或基于注解的配置来定义 原型 bean,这样我就可以使用自定义参数获取 bean 实例价值?我的用例是一个消息队列处理程序,它使用入站消息中提供的不同参数值进行 API 调用。
在这种情况下,我似乎可以做以下两件事之一:
- 获取我的原型作用域 bean 的一个实例,然后调用 setter 来自定义它以特定于入站消息。
- 使用普通
new MyPrototypeBean()
构造 bean class 的新实例,然后调用 setter 来自定义实例。
也许我的问题的另一种表述方式是:使用原型作用域 bean 与使用简单的 Java 构造函数相比有什么好处?
要在将参数传递给构造函数时从另一个 bean 获取原型 bean,您可以使用 <lookup-method>
(XML 配置)或 @Lookup
(基于注释的配置)。
如果你想从 "unmanaged" 代码(而不是从 bean)中获取原型实例 或者 你不想使用查找方法,你可以使用 org.springframework.beans.factory.BeanFactory.getBean(String beanName, Object...)
.
实现相同的效果
回答你的第二个问题,原型作用域 bean 和使用简单 Java 构造函数的区别在于原型作用域 bean 仍然可以访问 Spring 容器的功能。这包括但不限于以下内容:它可以在 XML 配置中提供协作者 (<property name="someCollaborator" ref="..."/>
) 或带有注释 (@Resource
、@Autowired
、...) , t 可以实现 Spring 感知接口(如 ApplicationContextAware
以便原型 bean 本身可以访问容器)。
是否可以使用 XML 配置或基于注解的配置来定义 原型 bean,这样我就可以使用自定义参数获取 bean 实例价值?我的用例是一个消息队列处理程序,它使用入站消息中提供的不同参数值进行 API 调用。
在这种情况下,我似乎可以做以下两件事之一:
- 获取我的原型作用域 bean 的一个实例,然后调用 setter 来自定义它以特定于入站消息。
- 使用普通
new MyPrototypeBean()
构造 bean class 的新实例,然后调用 setter 来自定义实例。
也许我的问题的另一种表述方式是:使用原型作用域 bean 与使用简单的 Java 构造函数相比有什么好处?
要在将参数传递给构造函数时从另一个 bean 获取原型 bean,您可以使用 <lookup-method>
(XML 配置)或 @Lookup
(基于注释的配置)。
如果你想从 "unmanaged" 代码(而不是从 bean)中获取原型实例 或者 你不想使用查找方法,你可以使用 org.springframework.beans.factory.BeanFactory.getBean(String beanName, Object...)
.
回答你的第二个问题,原型作用域 bean 和使用简单 Java 构造函数的区别在于原型作用域 bean 仍然可以访问 Spring 容器的功能。这包括但不限于以下内容:它可以在 XML 配置中提供协作者 (<property name="someCollaborator" ref="..."/>
) 或带有注释 (@Resource
、@Autowired
、...) , t 可以实现 Spring 感知接口(如 ApplicationContextAware
以便原型 bean 本身可以访问容器)。