首页 > 解决方案 > 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 怎么能总是获取现有的单例,所以代理无法处理调用?

标签: javaspringdependency-injection

解决方案


当你用 注释类时@Configuration,用 注释的方法@Bean被代理包装CGLIB

如果这是该方法的第一次调用,则将执行原始方法的主体,并将生成的对象存储在Spring上下文中。所有后续调用仅返回从上下文中检索到的 bean。


推荐阅读