Spring项目中value注解,@Value不能a够读取到配置文件的值,无法成功注入值的问题解决(超简单)

简介: Spring项目中value注解,@Value不能a够读取到配置文件的值,无法成功注入值的问题解决(超简单)

前言



今天在做项目的时候,我在监听器里面使用@Value注解获取配置文件中的值,然后出现了空指针错误,表示值没有获取到。


  1. 然后我试了一下在controller层里面设置一个get方法,然后通过get方法获取,然后发现也是不行的。有点懵!
  2. 后来我发现了一个问题,我设置的Listener类和springboot不能共享spring的上下文,因为我这个类没有通过@Component注解加入到spring管理,所以获取不到值。
  3. 最后我想到了一个办法通过构造器传值。


初始代码



import com.infosec.itsramanage.listener.system.ThreadCpu;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SystemListener implements ServletContextListener {
    @Value("${systemCpuProperties}")
    private String scp;
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ThreadCpu threadCpu = new ThreadCpu(scp);
        threadCpu.start();
    }
}
import com.infosec.itsramanage.listener.SystemListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebMvcConfig {
    //设置监听器,在服务上下文初始化的时候执行监听
    @Bean
    public ServletListenerRegistrationBean<SystemListener> systemListener(){
        ServletListenerRegistrationBean<SystemListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
        servletListenerRegistrationBean.setListener(new SystemListener());
        return servletListenerRegistrationBean;
    }
}


修改后的代码



import com.infosec.itsramanage.listener.system.ThreadCpu;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SystemListener implements ServletContextListener {
    private String scp;
    public SystemListener(String scp) {
        super();
        this.scp = scp;
    }
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ThreadCpu threadCpu = new ThreadCpu(scp);
        threadCpu.start();
    }
}
import com.infosec.itsramanage.listener.SystemListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebMvcConfig {
    @Value("${systemCpuProperties}")
    private String scp;
    //设置监听器,在服务上下文初始化的时候执行监听
    @Bean
    public ServletListenerRegistrationBean<SystemListener> systemListener(){
        ServletListenerRegistrationBean<SystemListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
        servletListenerRegistrationBean.setListener(new SystemListener(scp));
        return servletListenerRegistrationBean;
    }
}


目录
相关文章
|
7天前
|
运维 Java 程序员
Spring5深入浅出篇:基于注解实现的AOP
# Spring5 AOP 深入理解:注解实现 本文介绍了基于注解的AOP编程步骤,包括原始对象、额外功能、切点和组装切面。步骤1-3旨在构建切面,与传统AOP相似。示例代码展示了如何使用`@Around`定义切面和执行逻辑。配置中,通过`@Aspect`和`@Around`注解定义切点,并在Spring配置中启用AOP自动代理。 进一步讨论了切点复用,避免重复代码以提高代码维护性。通过`@Pointcut`定义通用切点表达式,然后在多个通知中引用。此外,解释了AOP底层实现的两种动态代理方式:JDK动态代理和Cglib字节码增强,默认使用JDK,可通过配置切换到Cglib
|
3天前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
6天前
|
JavaScript Java 开发者
Spring Boot中的@Lazy注解:概念及实战应用
【4月更文挑战第7天】在Spring Framework中,@Lazy注解是一个非常有用的特性,它允许开发者控制Spring容器的bean初始化时机。本文将详细介绍@Lazy注解的概念,并通过一个实际的例子展示如何在Spring Boot应用中使用它。
18 2
|
7天前
|
XML Java 数据格式
Spring 项目如何使用AOP
Spring 项目如何使用AOP
20 2
|
7天前
|
XML Java 数据格式
Spring 属性注入方式
Spring 属性注入方式
13 2
|
7天前
|
Java Spring
Spring boot项目如何发送邮件
Spring boot项目如何发送邮件
17 2
|
7天前
|
前端开发 Java
SpringBoot之自定义注解参数校验
SpringBoot之自定义注解参数校验
16 2
|
13天前
|
Java API 数据安全/隐私保护
【亮剑】如何在Java项目中结合Spring框架实现邮件发送功能
【4月更文挑战第30天】本文介绍了如何在Java项目中结合Spring框架实现邮件发送功能。首先,需在`pom.xml`添加Spring和JavaMail依赖。然后,在`applicationContext.xml`配置邮件发送器,包括SMTP服务器信息。接着,创建一个使用依赖注入的`EmailService`类,通过`JavaMailSender`发送邮件。最后,调用`EmailService`的`sendSimpleEmail`方法即可发送邮件。最佳实践包括:使用配置管理敏感信息,利用`MimeMessage`构造复杂邮件,异常处理和日志记录,以及在大量发送时考虑使用邮件队列。
|
13天前
|
Java Spring
springboot自带的@Scheduled注解开启定时任务
springboot自带的@Scheduled注解开启定时任务
|
16天前
|
XML JSON Java
【SpringBoot】springboot常用注解
【SpringBoot】springboot常用注解