Aar*_*lla 12 java spring scope dependency-injection
我正在编写自己的范围(即实现的类org.springframework.beans.factory.config.Scope),我需要注入一些bean.我怎么做?
背景:Spring必须首先创建所有范围bean,以便我可以定义哪些bean进入范围.但是,首先需要构建范围的bean呢?
我想出了这个似乎很安全的解决方法,但我想听听评论(或者也许我的回答给你一些更好的想法):
@Autowired)创建一个“范围配置器”bean:
public CustomScopeConfigurer {
@Autowired private Foo foo;
private CustomScope scope;
public CustomScopeConfigurer( CustomScope scope ) {
this.scope = scope;
}
@PostConstruct
public void initScope() {
scope.setFoo( foo );
}
}
Run Code Online (Sandbox Code Playgroud)
这个配置器 bean 一定不能是懒惰的。
推理:
范围本身不能使用自动装配,因为它是在第一个 bean 之前创建的。虽然它可能稍后创建,但您可以确定它将在所有其他 bean 之前创建。所以自动装配不能可靠地工作。
配置器 bean 将与所有其他 bean 一起创建,但在范围之后。所以自动装配就可以了。
由于配置器 bean 不是延迟初始化的,因此它将在应用程序的其余部分可以看到应用程序上下文之前创建。这意味着@Scope("custom")此时还不能创建该作用域的任何 bean(即带有 的 bean) - 该作用域不能是“活动的”,但 -> Spring 还不会尝试将任何 bean 放入其中。
作用域本身通常在某处创建为静态常量。这就是为什么我们必须将它作为参数传递给构造函数。