解决无法注入spring容器,获取不到spring容器中的bean问题
解决无法注入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问题相关推荐
- java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?
前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...
- Spring学习:一、Spring概述、Spring入门
1 Spring概述 1.1 什么是Spring Rod Johnson(http://baike.baidu.com/item/Rod Johnson)在2002年编著的<Expert one ...
- Servlet自动注入Spring容器中的Bean解决方法
Servlet自动注入Spring容器中的Bean解决方法 参考文章: (1)Servlet自动注入Spring容器中的Bean解决方法 (2)https://www.cnblogs.com/jank ...
- Spring Boot中普通类获取Spring容器中的Bean
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...
- 【SpringBoot】在普通类中获取spring容器中的bean
这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...
- spring依赖注入_Spring源码阅读:Spring依赖注入容器
依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...
- Spring IoC容器设计与实现——IoC容器的依赖注入
Spring IoC容器设计与实现--IoC容器的初始化过程 依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预 ...
- SpringBoot 之 普通类获取Spring容器中的bean
SpringBoot 之 普通类获取Spring容器中的bean 转载于:https://www.cnblogs.com/lwmp/p/8892927.html
- 在普通类中获取spring容器中的bean
在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...
最新文章
- 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观
- oracle不能用uuid,Oracle 应用之--VirtualBox UUID问题
- 一个基于poi的excel导出程序
- Springboot集成cache的key生成策略
- python data frame_Python dataframer包_程序模块 - PyPI - Python中文网
- 天池 在线编程 最大得分(DP)
- 编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件...
- 小爱同学100个奇葩回复_小爱同学深度体验报告:这6个问题值得思考
- c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写
- 计算机网络---TCP/IP网络编程实验
- 伴娘礼服上的年华(五)
- python复利计算_python:复利计算
- Linux wifi hostpad,将你的电脑变身无线路由wifi host, ipad/ipod/手机一起来无线互联吧...
- android 支付sdk流程,支付SDK
- 一文归纳Ai调参炼丹之法
- 【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
- Linux 挂载2TB以上硬盘
- miix2 10 linux,联想Miix320安装Win10+Ubuntu双系统引导的方法(超简单)
- 液晶显示屏的C语言编码,液晶屏代码讲解
- librdkafka开源库使用总结
热门文章
- python调用gpu amd_python-将Keras和Tensorflow与AMD GPU一起使用
- windows在命令行窗口如何进入指定盘符目录
- Visio画出方格图,并且在里面添加东西
- python 预编译_python 预编译
- 【面筋烧烤手册】网络安全
- c/c++基本类型sizeof:short,unsigned short,int,unsigned int,long,unsigned long,long long,unsigned long lon
- 进行外贸邮件群发需要注意的基本事项
- 如何删除 C:\Users\lenovo\Documents\Tecent Files
- loadedapk.java_求助【xposed框架吧】_百度贴吧
- 常用的博客改字体颜色