当前位置 博文首页 > 文章内容

    关于Springboot如何获取IOC容器

    作者:shunshunshun18 栏目:未分类 时间:2021-08-15 14:45:15

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Springboot项目中获取IOC容器的方式

    在Springboot项目中如果要获取IOC容器目前有两种方法。

    方法一(不实用,不推荐):

    在Springboot项目中都会存在一个SpringApplication的启动类,我们通过以下代码启动IOC容器。

    SpringApplication.run(Application.class, args);
    

    其实run方法会将创建的IOC容器作为返回值返回,那么我们就可以通过声明一个ApplicationContext对象来接收run方法的返回值。

    public class SpringApplication {
        public static void main(String[] args) {
            ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
            Object startSerive = applicationContext.getBean("startSerive");
        }
    }
    

    但是,使用这种方法会遇到各种各样的问题,所以我们通常使用第二种方法。

    方法二(强烈推荐):

    通过编写实现了ApplicationContextAware的工具类来获取IOC容器,当实现了ApplicationContextAware的类在容器中被初始化和加载后,会自动调用ApplicationContextAware中的setApplicationContext方法,将IOC容器传入setApplicationContext方法的形参中。

    以下是用于获取IOC容器的工具类:

    public class SpringContextUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
        public SpringContextUtil() {
        }
        /**
         * 设置上下文
         * @param applicationContext
         * @throws BeansException
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if (SpringContextUtil.applicationContext == null) {
                SpringContextUtil.applicationContext = applicationContext;
            }
        }
        /**
         * 获取上下文
         * @return
         */
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        /**
         * 通过名字获取上下文中的bean
         * @param name
         * @return
         */
        public static Object getBean(String name){
            return applicationContext.getBean(name);
        }
        /**
         * 通过类型获取上下文中的bean
         * @param requiredType
         * @return
         */
        public static Object getBean(Class<?> requiredType){
            return applicationContext.getBean(requiredType);
        }
    }
    

    上面这个工具类只有在被IOC容器加载完之后才会调用setApplicationContext,那么该怎么把工具类放到IOC容器中呢?我们使用@Import注解来实现,具体使用方法请看下面代码:

    @SpringBootApplication
    @Import({SpringContextUtil.class})
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    注:不使用@Import也是可以的,例如在SpringContextUtil类上面标注@Component等类似的注解也是可以的。

    @Import注解须知:

    1.@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中

    2.加入IOC容器的方式有很多种,@Import注解可以用于导入第三方包 ,当然@Bean注解也可以,但是@Import注解快速导入的方式更加便捷

    总结

    本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注IIS7站长之家博文的更多内容!