gal*_*ics 7 java spring spring-aop spring-bean
我在考虑Spring中的bean的延迟初始化.对我来说,这里的"懒惰"意味着在引用bean时会创建一个bean,这一点并不十分清楚.
我期望Spring中的延迟初始化支持是不同的.我认为这是一个基于"方法调用"的懒惰创作.我的意思是,无论何时在方法上调用任何方法,都会创建它.
我认为这可以通过创建特定bean的代理实例并在任何方法调用上进行初始化来轻松解决.
我错过了为什么没有实现的东西?这个概念有什么问题吗?
任何反馈/想法/答案将不胜感激.
多谢你们!
您可以通过使用proxyMode
of ScopedProxyMode.TARGET_CLASS
(CGLIB) 或ScopedProxyMode.INTERFACES
(JDK)来限定 bean 的范围来实现您想要的行为。
例如
public class StackOverflow {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Conf.class);
Bar bar = ctx.getBean(Bar.class);
System.out.println(bar);
System.out.println(bar.foo.toString());
}
}
@Configuration
class Conf {
@Bean
@Lazy
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public Foo foo() {
System.out.println("heyy");
return new Foo();
}
@Bean
public Bar bar() {
return new Bar();
}
}
class Bar {
@Autowired
public Foo foo;
}
class Foo {
}
Run Code Online (Sandbox Code Playgroud)
将打印
com.example.Bar@3a52dba3
heyy
com.example.Foo@7bedc48a
Run Code Online (Sandbox Code Playgroud)
证明只有在Foo
bean 中的 Spring 上下文注入@Bean
的Foo
实例上调用方法之后,bean 才通过其工厂方法进行初始化Bar
。
该@Scope
批注可以在类声明中使用。
归档时间: |
|
查看次数: |
4229 次 |
最近记录: |