Spring Boot - 沒有 @Component 也能取得 注入的物件 - 使用ApplicationContext 產生 Bean

Spring Boot - 沒有  @Component 也能取得 注入的物件 - 使用ApplicationContext 產生 Bean

假設,我的物件是需要被實體化的,而且不唯一,隨時需要 建立 new 出一個物件,

但物件裡面,又需要有各種被注入的物件,但本身卻不壓@Component @Bean 或 @Autowire

有什麼方法可以做到這個方法呢?

網路上有一篇文章為

https://tomcools.be/post/apr-2020-static-spring-bean/

大概很巧妙的,使用 某個 Component 並有一個靜態屬性,靜態屬性儲存 ApplicationContext 

並且使用方法注入,去設定這個靜態屬性,

就可以用 ApplicationContext 的 getBean 方法,取得各個 IoC 容器裡的注入物件。

@Component
public class StaticContextAccessor {

    private static ApplicationContext context;

    @Autowired
    public StaticContextAccessor(ApplicationContext applicationContext) {
        context = applicationContext;
    }

    public static <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
}

使用方法如下

UserRepository userRepo = StaticContextAccessor.getBean(UserRespository.class)

大概這樣就可以在任何沒有@Component 的物件,在初始化時,可以在建構子的時候,追加各種需要被注入的物件