当前位置: 首页 > news >正文

springboot自定义工具

springboot自定义工具

  • 上下文工具类

上下文工具类

你上下文工具类,获取注册的bean。

public class SpringContextUtils implements ApplicationListener<ApplicationPreparedEvent> {protected static ApplicationContext context;@Overridepublic void onApplicationEvent(ApplicationPreparedEvent applicationPreparedEvent) {context = applicationPreparedEvent.getApplicationContext();}public static ApplicationContext getContext() {return context;}public static <T> T getBean(String beanName) {return (T) context.getBean(beanName);}public static <T> T getBean(Class<?> clazz) {return (T) context.getBean(clazz);}}启动类:
@ComponentScan(basePackages = {"com"}, excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {CMSFilter.class})})
public class ServiceApplication extends SpringBootServletInitializer {private static Logger logger = LoggerFactory.getLogger(ServiceApplication.class);@Value("${system.name:unknown}")public String currentService;@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.listeners(new SpringContextUtils()).sources(ServiceApplication.class);}public static void main(String[] args) {// 配置当前 Main-JAR 的运行路径configMainJarRootPath();// 判断当前服务是否依赖 springboot 框架checkSpringFramework();try {SpringApplication springApplication = new SpringApplication(ServiceApplication.class);springApplication.addListeners(new SpringContextUtils());ApplicationContext applicationContext = springApplication.run(args);AppContextHelper.setContext(applicationContext, true);} catch (Exception e) {//启动异常后直接退出 依靠keeper拉起logger.error("application start error : " + e.getMessage(), e);System.exit(0);}}/*** 配置当前 Main-JAR 的运行路径*/private static String configMainJarRootPath() {String absolutePath = "";// get current main-jar absolute pathURL jarUrl = ServiceApplication.class.getProtectionDomain().getCodeSource().getLocation();logger.info("current main-jar absolute path:" + jarUrl);try {File file = new File(jarUrl.toURI());absolutePath = file.getParentFile().getAbsolutePath();// 将当前 main-jar 的 root 目录写入全局业务上下文(缓存)BusinessContext.getInstance().setMainJarPath(absolutePath);} catch (URISyntaxException e) {logger.error("get current main-jar absolute path failed, this will cause some resources load unsuccess");}return absolutePath;}/*** 检查当前应用的框架,并将结果存入全局对象中(是否基于 springboot)*/private static void checkSpringFramework() {boolean result = AnnotationUtils.isAnnotationDeclaredLocally(SpringBootApplication.class, ServiceApplication.class);BusinessContext.getInstance().setBaseSpringboot(result);}public ServiceApplication() {FeignHelper.initCurrentService(this.currentService);}
}

site:https://blog.csdn.net/wo541075754/article/details/104324070

方式二:

package org.rabbit.consumer.spring;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** @author hongsir 2017-11-03 19:36* @apiNote spring上下文工具类,用于普通类调用springIOC中的对象*/
@Component
public class SpringContextUtils implements ApplicationContextAware {private static ApplicationContext applicationContext = null;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (SpringContextUtils.applicationContext == null) {SpringContextUtils.applicationContext = applicationContext;}}/*** @apiNote 获取applicationContext* @author hongsir 2017/11/3 19:40:00*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** @apiNote 通过name获取 Bean.* @author hongsir 2017/11/3 19:39:00*/public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** @apiNote 通过class获取Bean.* @author hongsir 2017/11/3 19:39:00*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** @apiNote 通过name, 以及Clazz返回指定的Bean* @author hongsir 2017/11/3 19:39:00*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}
}
原文地址:https://blog.csdn.net/johnrui/article/details/146426411
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95618.html

相关文章:

  • Pytest的Fixture使用
  • 施耐德 Unity Pro 项目配置
  • 综合章节:游戏网络化、模组化与深度扩展
  • 红宝书第十一讲:超易懂版「ES6类与继承」零基础教程:用现实例子+图解实现
  • React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?
  • 未初始化引用检测工具UBITech
  • 架构思维:如何设计一个支持海量数据存储的高扩展性架构
  • 快速入手:Nacos融合SpringCloud成为注册配置中心
  • kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南
  • 通往自主智能之路:探索自我成长的AI
  • UDP套接字编程(代码)
  • SpringMVC_day02
  • 分布式系统设计陷阱,白话CAP理论
  • 运行时智控:PanLang 开发者指南(一)运行时系统核心模块实现——PanLang 原型全栈设计方案与实验性探索5
  • nacos未经授权创建用户漏洞
  • 快速入手-基于Django的Form和ModelForm操作(七)
  • SAP-ABAP:SAP BW模块架构与实战应用详解
  • 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试
  • 银河麒麟桌面版包管理器(二)
  • 【Linux】线程库