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 的物件,在初始化時,可以在建構子的時候,追加各種需要被注入的物件