Skip to content

准备条件

  • 准备一个工具类,用于在非Spring管理的Bean中获取Spring容器中的Bean

    java
    @Component
    public class SpringContextUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext = null;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if (SpringContextUtil.applicationContext == null) {
                SpringContextUtil.applicationContext = applicationContext;
            }
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static Object getBean(String name) {
            return getApplicationContext().getBean(name);
        }
    
        public static <T> T getBean(Class<T> clazz) {
            return getApplicationContext().getBean(clazz);
        }
    
        public static <T> T getBean(String name, Class<T> clazz) {
            return getApplicationContext().getBean(name, clazz);
        }
    
    }

main方法注入

  • main方法是static,static方法内不能使用非static的变量或者方法,所以道理很简单,要想使用,先启动springboot应用,应用启动完毕后,所有的Bean肯定已经实例化完毕了,使用工具类从Spring容器里捞就行了

    java
    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
        ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
        // 以获取RedisUtil的实例为例
        RedisUtil redisUtil = applicationContext.getBean(RedisUtil.class);
        String obj = redisUtil.getCacheObject("test");
    }

MIT版权,未经许可禁止任何形式的转载