Spring的DI适用于单例范围bean。但是,对于原型范围,如果原型bean本身将注入其他bean则不方便。对于原型bean来说,我想使用带有运行时构造函数参数的Java新关键字创建它们,这些参数很难在XML bean配置中静态描述。使用new关键字将原型bean从Spring容器中取出,当然不可能在它们中使用Spring DI。
我想知道人们如何解决这样的问题?当然我可以使用AspectJ做自己注射作为补偿。但是有两种注射机制对我来说不是一个优雅的解决方案。
答案 0 :(得分:1)
您应该能够通过context.getBean(name)
或context.getBean(class)
创建原型对象,其中context是ApplicationContext
实例。
另一种可能更方便的方法是使用工厂模式,工厂对象是一个单独的连接所有依赖关系并将它们传递给factory.createInstance(...)
中的构造对象。
答案 1 :(得分:0)
使用 @Configurable
标记原型bean答案 2 :(得分:0)
Spring允许将构造函数值传递给getBean()
方法,请查看此SO-Post:
spring bean with dynamic constructor value
此外,从上下文中检索bean会出现什么问题,只是部分初始化并且您是通过setter自己设置运行时参数?
请注意,Spring-Beans默认是Singletons,所以在你的Spring-Config中你必须明确地将它们指定为原型范围!