• 获取spring容器中的bean实例


    在开发过程中,我们可能需要动态获取spring容器中的某个bean的实例,此时我们就会用到ApplicationContext spring应用上下文,这里做一下记录,网上很多类似的的工具类。

    先写好工具类再测试一下是否好用

    工具类:

    1. package com.zhh.demo.common.util;
    2. import org.springframework.beans.BeansException;
    3. import org.springframework.context.ApplicationContext;
    4. import org.springframework.context.ApplicationContextAware;
    5. import org.springframework.stereotype.Component;
    6. /**
    7. * 容器应用上下文工具类
    8. * @author zhaoheng
    9. */
    10. @Component
    11. public class ApplicationContextUtil implements ApplicationContextAware {
    12. private static ApplicationContext applicationContext;
    13. /**
    14. * 将注入的 ApplicationContext 赋值给当前类中的applicationContext
    15. * @param applicationContext
    16. * @throws BeansException
    17. */
    18. @Override
    19. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    20. ApplicationContextUtil.applicationContext = applicationContext;
    21. }
    22. /**
    23. * 获取Spring的应用上下文
    24. * @return
    25. */
    26. public static ApplicationContext getContext(){
    27. return applicationContext;
    28. }
    29. /**
    30. * 根据bean名称获取到容器中的bean
    31. * */
    32. public static Object getBean(String name) {
    33. return applicationContext.getBean(name);
    34. }
    35. /**
    36. * 根据bean类型获取bean
    37. * */
    38. public static T getBean(Class clazz){
    39. return applicationContext.getBean(clazz);
    40. }
    41. /**
    42. * 根据bean类型和名称获取bean
    43. * */
    44. public static T getBean(String name, Class requiredType) {
    45. return applicationContext.getBean(name, requiredType);
    46. }
    47. }

    测试是否好用

    创建一个bean并注入到容器

    1. package com.zhh.demo.service;
    2. import org.springframework.stereotype.Service;
    3. /**
    4. * @Description: 测试bean
    5. * @Author: zhaoheng
    6. */
    7. @Service
    8. public class TestService {
    9. public void show(){
    10. System.out.println("TestService-show...");
    11. }
    12. }

    测试方法

    1. package com.zhh.demo;
    2. import com.zhh.demo.common.util.ApplicationContextUtil;
    3. import com.zhh.demo.service.TestService;
    4. import org.junit.jupiter.api.Test;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.boot.test.context.SpringBootTest;
    7. @SpringBootTest
    8. class ApplicationTest {
    9. @Autowired
    10. private ApplicationContextUtil applicationContextUtil;
    11. @Test
    12. void contextTest() {
    13. // 通过名称获取容器中的bean
    14. TestService userService1 = (TestService) applicationContextUtil.getBean("testService");
    15. userService1.show();
    16. System.out.println("---------------");
    17. // 通过class获取容器中的bean
    18. TestService testService2 = applicationContextUtil.getBean(TestService.class);
    19. testService2.show();
    20. }
    21. }

    测试结果:

  • 相关阅读:
    crsctl stop crs -f 停止不成功 (SYSTEMDG in QUIESCING state)
    MYSQL——毫秒值和日期类型数据的转换,DATE_SUB的用法
    BFS 之Flood Fill 算法(二)
    Redis6笔记03 SpringBoot整合Redis,事务和锁机制,持久化操作
    Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站
    Java开发者的Python快速进修指南:实战之跳表pro版本
    Android,GreenDao数据库框架
    SpringCloud 微服务(三)-分布式事务问题
    远程连接服务器的工具?
    “.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“
  • 原文地址:https://blog.csdn.net/Muscleheng/article/details/132942680