解决无法注入spring容器,获取不到spring容器中的bean问题

前两天工作中遇到一个问题,收到的需求是根据logbak日志实现通过过滤错误日志发送预警邮件到邮箱,logback自定义实现类如下

/*** @author KyleYao* @date 2020/4/21 13:01* @description: 错误日志邮件发送*/
@Componet
public class ErrorEmailAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {private final String[] TO = {"2854646670@qq.com"};private final String SUBJECT_PREFIX = "【Error】: ";@Autowiredprivate MailUtils mailUtils;@Overrideprotected void append(ILoggingEvent event) {//        System.out.println("level =" + event.getLevel());
//        System.out.println("msg =" + event.getMessage());
//        System.out.println("level =" + event.getLevel());//根据规则做相应调用 TODOif (event.getMessage().contains("邮件")) {System.out.println("开始发送邮件");MailBean mailBean = getMailBean(event);MailUtils.getInstance().sendMailAttachment(mailBean);}}private MailBean getMailBean(ILoggingEvent event) {MailBean mailBean = new MailBean();mailBean.setTo(TO);mailBean.setSubject(SUBJECT_PREFIX + event.getLoggerName());mailBean.setContent("date = " + event.getTimeStamp() + "\n" +"level =" + event.getLevel() + "\n" +"message =" + event.getMessage() + "\n" +"thread = " + event.getThreadName() + "\n" +"logger =" + event.getLoggerName() + "\n" +"message =" + event.getMessage());return mailBean;}
}

因为MailUtils是通过@Service注解注入到spring容器中的,所以我这里给这个类加上@Componet注解想让他加入到容器中,这样可以获取自动注入的MailUtils,但是发现怎么也获取不到(这个原因后续研究),后来在同事帮助下使用了另一种写法,改造了一下MailUtils

@Slf4j
@Service
public class MailUtils {@Autowiredprivate JavaMailSender javaMailSender;@Autowiredprivate MailProperties mailProperties;public static MailUtils getInstance() {return SpringContextUtils.getBean(MailUtils.class);}

截取部分,通过自己封装的spring上下文工具获取到他的实体,这样在某些类无法注入到容器中时又想获得spring容器中的管理的bean的时候可以通过这种方式实现。
附:spring上下文工具如下:

/*** Spring上下文工具类* * @author Andrew*/
@Component
public class SpringContextUtils implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (SpringContextUtils.applicationContext == null) {SpringContextUtils.applicationContext = applicationContext;}}public static ApplicationContext getContext() {return SpringContextUtils.applicationContext;}public static <T> T getBean(Class<T> beanType) {return applicationContext.getBean(beanType);}public static <T> T getBean(String beanName, Class<T> beanType) {return applicationContext.getBean(beanName, beanType);}public static Object getBean(String beanName) {return applicationContext.getBean(beanName);}public static ParamsProperties getParamsProperties() {return (ParamsProperties) getBean("paramsProperties");}
}

解决无法注入spring容器,获取不到spring容器中的bean问题相关推荐

  1. java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

    前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...

  2. Spring学习:一、Spring概述、Spring入门

    1 Spring概述 1.1 什么是Spring Rod Johnson(http://baike.baidu.com/item/Rod Johnson)在2002年编著的<Expert one ...

  3. Servlet自动注入Spring容器中的Bean解决方法

    Servlet自动注入Spring容器中的Bean解决方法 参考文章: (1)Servlet自动注入Spring容器中的Bean解决方法 (2)https://www.cnblogs.com/jank ...

  4. Spring Boot中普通类获取Spring容器中的Bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...

  5. 【SpringBoot】在普通类中获取spring容器中的bean

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  6. spring依赖注入_Spring源码阅读:Spring依赖注入容器

    依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...

  7. Spring IoC容器设计与实现——IoC容器的依赖注入

    Spring IoC容器设计与实现--IoC容器的初始化过程 依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预 ...

  8. SpringBoot 之 普通类获取Spring容器中的bean

    SpringBoot 之 普通类获取Spring容器中的bean 转载于:https://www.cnblogs.com/lwmp/p/8892927.html

  9. 在普通类中获取spring容器中的bean

    在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...

最新文章

  1. 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观
  2. oracle不能用uuid,Oracle 应用之--VirtualBox UUID问题
  3. 一个基于poi的excel导出程序
  4. Springboot集成cache的key生成策略
  5. python data frame_Python dataframer包_程序模块 - PyPI - Python中文网
  6. 天池 在线编程 最大得分(DP)
  7. 编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件...
  8. 小爱同学100个奇葩回复_小爱同学深度体验报告:这6个问题值得思考
  9. c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写
  10. 计算机网络---TCP/IP网络编程实验
  11. 伴娘礼服上的年华(五)
  12. python复利计算_python:复利计算
  13. Linux wifi hostpad,将你的电脑变身无线路由wifi host, ipad/ipod/手机一起来无线互联吧...
  14. android 支付sdk流程,支付SDK
  15. 一文归纳Ai调参炼丹之法
  16. 【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
  17. Linux 挂载2TB以上硬盘
  18. miix2 10 linux,联想Miix320安装Win10+Ubuntu双系统引导的方法(超简单)
  19. 液晶显示屏的C语言编码,液晶屏代码讲解
  20. librdkafka开源库使用总结

热门文章

  1. python调用gpu amd_python-将Keras和Tensorflow与AMD GPU一起使用
  2. windows在命令行窗口如何进入指定盘符目录
  3. Visio画出方格图,并且在里面添加东西
  4. python 预编译_python 预编译
  5. 【面筋烧烤手册】网络安全
  6. c/c++基本类型sizeof:short,unsigned short,int,unsigned int,long,unsigned long,long long,unsigned long lon
  7. 进行外贸邮件群发需要注意的基本事项
  8. 如何删除 C:\Users\lenovo\Documents\Tecent Files
  9. loadedapk.java_求助【xposed框架吧】_百度贴吧
  10. 常用的博客改字体颜色