1.方式一:直接注入
@Autowired
private ApplicationContext applicationContext;
@Test
public void test() {
T bean = (T) applicationContext.getBean("beanId");
}
2.方式二:利用SpringBoot启动类中run方法返回的Context,存到项目静态变量中,使用自定义工具类进行调用。
@SpringBootApplication
public class SpringbootShiroApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(SpringbootShiroApplication.class, args);
SpringUtils.setApplicationContext(applicationContext);
}
}
public class SpringUtils {
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static void setApplicationContext(ApplicationContext applicationContext) {
SpringUtils.applicationContext = applicationContext;
}
public static Object getBean(String beanId) {
return applicationContext.getBean(beanId);
}
}
- 调用【使用单元测试会报空指针,可以在controller或者service中调用测试】
T config = (T) SpringUtils.getBean("config");
3.方式三:实现ApplicationContextAware接口,使用时直接调用其静态方法即可。
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static Object getBean(String name) {
return context.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return context.getBean(name, clazz);
}
}