Spring Boot中获取IOC容器的多种方式

 更新时间:2025年09月22日 11:13:24   作者:生无谓  
本文主要介绍了Spring Boot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过SpringApplication.run()、借助BeanFactory及实现BeanFactoryAware接口,感兴趣的可以了解一下

1. 直接注入ApplicationContext

@Service
public class MyService {
    
    @Autowired
    private ApplicationContext applicationContext;
    
    public void doSomething() {
        // 通过ApplicationContext获取Bean
        UserService userService = applicationContext.getBean(UserService.class);
        // 或者通过名称获取
        UserService userService2 = (UserService) applicationContext.getBean("userService");
    }
}

2. 实现ApplicationContextAware接口

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

3. 通过SpringApplication.run()获取ApplicationContext

@SpringBootApplication
public class Application {
    
    public static void main(String[] args) {
        // 启动应用并获取ApplicationContext
        ApplicationContext context = SpringApplication.run(Application.class, args);
        
        // 直接从context中获取Bean
        UserService userService = context.getBean(UserService.class);
        userService.doSomething();
    }
}

4. 通过BeanFactory获取

@Service
public class MyService {
    
    @Autowired
    private BeanFactory beanFactory;
    
    public void doSomething() {
        if (beanFactory.containsBean("userService")) {
            UserService userService = (UserService) beanFactory.getBean("userService");
            // 使用userService
        }
    }
}

5. 通过实现BeanFactoryAware接口

@Component
public class MyComponent implements BeanFactoryAware {
    
    private BeanFactory beanFactory;
    
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }
    
    public void doSomething() {
        UserService userService = (UserService) beanFactory.getBean("userService");
        // 使用Bean
    }
}

到此这篇关于Spring Boot中获取IOC容器的多种方式的文章就介绍到这了,更多相关SpringBoot 获取IOC容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现简单的学生管理系统

    java实现简单的学生管理系统

    这篇文章主要为大家详细介绍了java实现简单的学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Mybatis详解在注解sql时报错的解决方法

    Mybatis详解在注解sql时报错的解决方法

    MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在,本篇文章带你看看在注解sql时所报出的错误解决
    2022-03-03
  • 一文详解SpringBoot如何使用pageHelper做分页处理

    一文详解SpringBoot如何使用pageHelper做分页处理

    分页是常见大型项目都需要的一个功能,PageHelper是一个非常流行的MyBatis分页插件,下面就跟随小编一起来了解下SpringBoot是如何使用pageHelper做分页处理的吧
    2025-03-03
  • springboot log4j2.xml如何读取application.yml中属性值

    springboot log4j2.xml如何读取application.yml中属性值

    这篇文章主要介绍了springboot log4j2.xml如何读取application.yml中属性值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java实现简单的五子棋游戏

    java实现简单的五子棋游戏

    这篇文章主要为大家详细介绍了java实现简单的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 使用MyBatis的动态SQL注解实现实体的CRUD操作代码

    使用MyBatis的动态SQL注解实现实体的CRUD操作代码

    在使用MyBatis进行数据库操作时,动态SQL注解提供了一种优雅的方式来编写动态SQL语句,MyBatis 3.x 版本提供了下四个CRUD的高级注解,这些注解可以帮助开发者在Mapper接口中动态地构建SQL语句,本文给大家介绍了使用MyBatis的动态SQL注解实现实体的CRUD操作
    2024-06-06
  • MyBatis 延迟加载与缓存的实现

    MyBatis 延迟加载与缓存的实现

    本文主要介绍了MyBatis 延迟加载与缓存的实现
    2025-05-05
  • Spring中ImportBeanDefinitionRegistrar源码和使用方式

    Spring中ImportBeanDefinitionRegistrar源码和使用方式

    Spring容器扩展流程总结:1. 定义Mapper层,2. 通过FactoryBean创建代理对象,3. 使用ImportBeanDefinitionRegistrar修改Bean定义,4. 应用自定义注解@LuoyanImportBeanDefinitionRegistrar,5. 配置类中执行后置处理器,6. 启动类中查看源码,希望对大家有所帮助
    2024-11-11
  • 修改Android应用的样式的一些关键点解析

    修改Android应用的样式的一些关键点解析

    这篇文章主要介绍了修改Android应用的样式的一些关键点,即对影响外观的theme跟style的相关修改,需要的朋友可以参考下
    2015-12-12
  • java微信公众号开发第一步 公众号接入和access_token管理

    java微信公众号开发第一步 公众号接入和access_token管理

    这篇文章主要为大家介绍了java微信公众号开发,主要内容包括公众号接入和access_token管理,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论