spring 将bean作为静态依赖项注入

x33g5p2x  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(104)

将依赖bean设为static会导致问题吗?

@Component
public class SomeBean {
    
    @Autowired
    private static DependencyBean dependency;
    ...
}
mum43rcc

mum43rcc1#

Spring、CDI(可能还有Guice等)通常不允许将bean“注入”到static字段中。为什么会这样?
虽然Spring当然 * 可以 * 支持将内容注入到静态字段中,但如果管理bean的两个副本,则会出现冲突,因为静态字段在类的所有示例中分片。在您的示例中,您只有一个托管示例,它可以在非常狭窄的范围内“工作”,但项目通常不会那么简单,这就是Spring不支持它的原因:

<!-- not a real spring definition, just an example -->
<bean id="example1" class="com.example.SomeBean">
    <property name="dependency" value="dependencyV1"/>
</bean>
<bean id="example2" class="com.example.SomeBean">
    <property name="dependency" value="alternateDependencyV2"/>
</bean>

围绕类加载、构造函数和DI/IOC的整个哲学还有其他原因,但这是主要原因。
有一些方法可以击败这种保护(不推荐):https://www.baeldung.com/spring-inject-static-field

相关问题