文章目录

  • 前言
  • 一、ApplicationContext获取bean
    • 1.1 应用情景
    • 1.2 实现方式

前言

springboot 通常获取bean的方式

  1. 通过@Resource或者@Autowired 获取容器中的bean。
  2. 通过ApplicationContext 应用上下文获取

一、ApplicationContext获取bean

1.1 应用情景

为了保持代码规整、风格统一,我们通常对数据库对象entity和返回出参转换应用mapstruct来转换,不在业务内循环赋值,但通常有类似保存了用户id但出参要返回用户名称。

1.2 实现方式

重写mapstruct中的afterConvertTo方法赋值

/*** @author Mr.wanter* @time 2021-11-18 0018* @description*/
@Mapper(componentModel = "spring")
public interface WarnMsgPageMapping extends BaseMapping<WarnMsgPO, WarningPageResp> {@Overridedefault void afterConvertTo(WarnMsgPO a, WarningPageResp b) {b.setMsgTypeName(ObjNameUtil.getMsgTypeName(a.getMsgType()));b.setChannelStatus(ObjNameUtil.getChannelStatus(a.getId(),a.getStrategyChannels()));DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");b.setPublishTime(ObjectUtils.isEmpty(a.getPublishTime())?"":dtf2.format(a.getPublishTime()));b.setCreateByName(ObjNameUtil.getUserName(a.getCreateBy()));}
}

获取bean工具

/*** @author Mr.wanter* @time 2021-10-26 0026* @description 获取bean,组件注入顺序靠后一点*/@Component
@Order(98)
public class SpringUtil implements ApplicationContextAware {private static Logger logger = LoggerFactory.getLogger(SpringUtil.class);private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(SpringUtil.applicationContext == null) {SpringUtil.applicationContext = applicationContext;}logger.info("ApplicationContext配置成功,applicationContext对象:"+SpringUtil.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);}
}

根据id获取各个数据名称的工具类

/*** @author Mr.wanter* @time 2021-11-15 0015* @description 根据id获取各个数据名称的工具类*/
public class ObjNameUtil {private static EmsOrgDao orgDao;private static StrategyChannelDao strategyChannelDao;private static DicStrategyMsgTypeDao dicStrategyMsgTypeDao;private static DicStrategyDisTypeDao dicStrategyDisTypeDao;private static RedisClient redisClient;private static MaillistPersonDao maillistPersonDao;private static WarnChannelDao warnChannelDao;private static UserDao userDao;/*** 根据id获取行政区划名称** @param id* @return*/public static String getDistrictName(String id) {redisClient = SpringUtil.getBean(RedisClient.class);String name = redisClient.get(MonitorConstants.TABLE_FW_T_EMS_ORG_TREE_ALL + id);return ObjectUtils.isEmpty(name) ? "" : name;}/*** 根据id获取机构名称** @param id* @return*/public static String getOrgName(String id) {orgDao = SpringUtil.getBean(EmsOrgDao.class);EmsOrgPO po = orgDao.findByOrgCode(id);return ObjectUtils.isEmpty(po) ? "" : po.getOrgName();}/*** 根据id获取渠道名称** @param channelId* @return*/public static String getChannelName(String channelId) {strategyChannelDao = SpringUtil.getBean(StrategyChannelDao.class);StringBuffer sb = new StringBuffer();String[] split = channelId.split(",");if (split.length > 0) {for (int i = 0; i < split.length; i++) {Optional<StrategyChannelPO> byId = strategyChannelDao.findById(split[i]);if (byId.isPresent()) {if (i == split.length - 1) {sb.append(byId.get().getChannelName());} else {sb.append(byId.get().getChannelName() + ",");}}}}return sb.toString();}/*** 根据id获取灾害类别** @param id* @return*/public static String getStrategyDisTypeName(String id) {dicStrategyDisTypeDao = SpringUtil.getBean(DicStrategyDisTypeDao.class);Optional<DicStrategyDisTypePO> byId = dicStrategyDisTypeDao.findById(id);return byId.isPresent() ? byId.get().getMsgType() : "";}/*** 根据id获取信息类型** @param id* @return*/public static String getMsgTypeName(String id) {dicStrategyMsgTypeDao = SpringUtil.getBean(DicStrategyMsgTypeDao.class);Optional<DicStrategyMsgTypePO> byId = dicStrategyMsgTypeDao.findById(id);return byId.isPresent() ? byId.get().getMsgType() : "";}/*** 根据id获取移动电话** @param personIds* @return*/public static  List<String> getPersonPhone(String personIds) {maillistPersonDao = SpringUtil.getBean(MaillistPersonDao.class);String[] split = personIds.split(",");List<String> personPhones=new ArrayList<>(split.length);if (split.length > 0) {for (int i = 0; i < split.length; i++) {Optional<MaillistPersonPO> byId = maillistPersonDao.findById(split[i]);if (byId.isPresent()) {personPhones.add(byId.get().getTelNumber());}}}return personPhones;}/*** 根据用户id获取用户名* @param id* @return*/public static String getUserName(String id) {userDao = SpringUtil.getBean(UserDao.class);Optional<UserPO> userPO = userDao.findById(id);return userPO.isPresent()?userPO.get().getName():"";}
}

SpringBoot 获取bean相关推荐

  1. 使用SpringBoot获取bean时出错:No qualifying....

    最近工作时遇到一个bug 项目使用springboot,在使用SpringContextHloder,getBean( ) ;时报错:No qualifying bean of type 'xxx' ...

  2. SpringBoot静态获取 bean的三种方式,你学会了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 ...

  3. springboot线程中获取bean

    在线程中是无法直接使用Spring Beans,但是又需要使用Spring中的bean执行方法 1:使用ApplicationContextAware在线程中直接获取bean 创建Applicatio ...

  4. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  5. Springboot使用bean方式详解(附代码)

    上一章节中介绍了springboot创建bean的几种方式:注解形式(@Controller/@Service/@Component/@Repository)和@Configuration/@Bean ...

  6. Spring的工具类,方便在非spring管理环境中获取bean

    场景 在SpringBoot的后台项目中,如果想要引入并且调用某个bean,可以直接通过注解的方式. 比如在单元测试中引入某业务的Controller @RunWith(SpringJUnit4Cla ...

  7. springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)

    SpringBoot自动配置 condition-1 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean @Conditio ...

  8. SpringBoot获取ApplicationContext

    2019独角兽企业重金招聘Python工程师标准>>> 有两种方法: 创建Component实现ApplicationContextAware接口,SpringBoot会自动调用这个 ...

  9. springboot获取多个请求参数_springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

最新文章

  1. mybatis 联查
  2. 自问自答:在VB中如何实现像C++一样printf的功能
  3. stay hungry stay foolish原文_弟子规原文+译文+注释
  4. java executor spring_Spring+TaskExecutor实例
  5. .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?
  6. 2021年8月上中旬好文收藏(1)
  7. vue报错 Uncaught (in promise) NavigationDuplicated {_name:““NavigationDuplicated“... 的解决方法
  8. Low Power概念介绍<Level Shifter>
  9. 计算机软件 退货,如何在在电脑收银系统中实现商品退货
  10. win10安装SqlServer2005教程
  11. java 规范 阿里巴巴_阿里巴巴 Java 代码规范
  12. 7-1 厘米换算英尺英寸 (c语言)
  13. 计算非空单元格的个数
  14. 随机变量概率分布函数汇总-离散型分布+连续型分布
  15. 惠普暗影精灵7和联想小新pro16哪个好
  16. IT人,更应该要注意保养!!
  17. React-moveable的使用
  18. 我参加了51CTO博客大赛,求投票!
  19. 深入了解基于RTMP数据传输协议的实时流媒体技术(图解过程)一看就会【建议新手收藏】
  20. MCE丨重组蛋白常见的融合标签

热门文章

  1. CSS3之媒体查询 - @media
  2. 吉布斯效应(Gibbs)、振铃(ring)现象和块效应(Blocking Artifact)
  3. 计算代码时间复杂度方法
  4. 促销管理——优惠券设计与架构
  5. 【Java】2、Java 编程基础
  6. Pytest学习笔记(3)-Setup和Teardown
  7. 关于HRESULT码详解
  8. 实现一个异步清零和置位的D触发器
  9. 西安博物院重现1000年前唐三彩,竟然是3D打印!
  10. 一盘多用的U盘启动盘制作