java - Spring如何知道bean注入@Bean和方法调用
问题描述
我正在使用 Spring Framework 尝试一些东西,我想知道 Spring 在使用 java 配置时如何通过方法调用注入单例依赖项?
例子 :
@Configuration
public class AppConfiguration {
@Bean
public BlogRepository blogRepository() {
return new BlogRepositoryImpl();
}
@Bean
@Scope("prototype")
public BlogService blogService() {
return new BlogServiceImpl(blogRepository());
}
@Bean
public AuthorService authorService() {
return new AuthorServiceImpl(blogRepository());
}
}
我知道这个类也是一个 bean,它由 Spring 代理,但是,BlogRepository
由于我blogRepository()
从类内部调用,Spring 怎么能总是获取现有的单例,所以代理无法处理调用?
解决方案
当你用 注释类时@Configuration
,用 注释的方法@Bean
被代理包装CGLIB
。
如果这是该方法的第一次调用,则将执行原始方法的主体,并将生成的对象存储在Spring
上下文中。所有后续调用仅返回从上下文中检索到的 bean。
推荐阅读
- rust - 如何防止“提前输入”
- javascript - 如何处理选择输入异步 React Js?材质 UI:您提供了超出范围的值
- python - 如何在 FastText 中打印分类报告?
- vue.js - 从循环Vue.js中的每个选择中获取数据
- .net - 同步和等待异步不是一回事吗?
- python - 如何将 2 个条件传递给 sqlalchemy 中的 where 子句?
- java - 为什么优先执行低优先级的线程
- php - 在 Controller codeigniter 4 中从外部 PHP 调用函数
- mysql - 仅当与当前行不同时才从先前行中获取值 [MySQL]
- apache - 使用 htaccess 从不同的 HTML 网站重定向到不同的 Wordpress 网站