Springboot在有参构造方法类中使用@Value注解取值

我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样

@Component
class A {
   @Value("${user.value}")
   private String configValue;

   public void test() {
      System.out.println(configValue);
   }
}

但有时我们需要这个类拥有一个有参的构造方法,比如

@Component
class A {
   @Value("${user.value}")
   private String configValue;

   private String s;

   public A(String s) {
      this.s = s;
   }
   public void test() {
      System.out.println(s);
      System.out.println(configValue);
   }
}

要使@Value生效,必须把Bean交给Spring进行管理,而不能使用new去实例化对象,否则@Value取值为NULL。我们一般使用@Autowired都是默认注入无参的构造方法,要想注入有参的构造方法,我们需要构建Config类:

@Configuration
public class AConfig {
  @Bean(name="abc")
  DataOpration abcA() {
    return new A("abc");
  }
}

然后创建SpringUtil类

@Component
public class SpringUtil implements ApplicationContextAware {

  private static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    if(SpringUtil.applicationContext == null) {
      SpringUtil.applicationContext = applicationContext;
    }
  }

  public static ApplicationContext getApplicationContext() {
    return applicationContext;
  }

  //通过name获取 Bean.
  public static Object getBean(String name){
    return getApplicationContext().getBean(name);
  }
}

在调用时,只需要获取到对应的Bean

A a = (A) SpringUtil.getBean("abc");
a.test();

就可以同时获取到配置文件中的值和传入的参数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-06-26

Springboot中@Value的使用详解

Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller.@Service.@Configuration.@Component等Spring托管的类中) 1.普通字符串注入 例:yml中存在key: name: zs @Value注入 @Value("${name}") public String name; 当yml中的name没有对应值时,即yml中为: name: 此时字符串name的值为"" 可设置注入属性的

springboot FeignClient注解及参数

一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 @FeignClient(name = "github-client", url = "https://api.github.com", configuration = GitHubExampleConfig.class) public interface GitHubClient { @Request

springBoot集成redis的key,value序列化的相关问题

使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 2.编写一个CacheService接口,使用redisCach

Springboot @Value使用代码实例

这篇文章主要介绍了Springboot @Value使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 entity.Book package com.draymonder.amor.entity; import java.util.List; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.contex

Spring Boot使用Value注解给静态变量赋值的方法

昨天在使用@Value注解给静态变量赋值的时候,发现静态变量的值始终是null.后来搜索一下得知其中原因,Spring Boot 不允许/不支持把值注入到静态变量中.但是我们可以变通一下解决这个问题.因为Spring Boot 支持set方法注入,我们可以利用非静态set方法注入静态变量.废话不多说,贴上我昨天写的代码: @Component public class CoverImageUtil { private static String endpoint; private static

Springboot @Value获取值为空问题解决方案

这篇文章主要介绍了Springboot @Value获取值为空问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在spring中,常常使用 @Value("${property}") 从application.properties中取值,需要注意两点 使用 @Value 的类不能使用 new 关键字进行实例化对象,必须采用 依赖注入的方式进行实例化 不能使用显式的构造方法 否则,将取不到值.解决方法如下: 删除显式的构造方法

解决没有@RunWith 和 @SpringBootTest注解或失效问题

导入别人的项目 或者 自己想创建一个测试类 经常会遇见了这个问题没有@RunWith 和 @SpringBootTest注解或失效 网上搜了搜 全是我下面的第一个解决方案 第二个才是重点 解决方案 1 添加依赖 如果 你是springboot项目 pom文件中添加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</

SpringBoot通过整合Dubbo解决@Reference注解问题

首先检查一下你的spring boot版本是多少? 如果是2.X 不用看了,spring boot 2.x 必定会出现这个问题, 改为 1.5.9 或其他1.x版本,目前生产环境建议使用1.x版本. <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9

Spring整合Dubbo框架过程及原理解析

这篇文章主要介绍了Spring整合Dubbo框架过程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用.演示过程创建两个小工程,一个作为服务的提供者,一个作为服务的消费者.通过Dubbo来实现服务消费者远程调用服务提供者的方法. dubbo 的使用需要一个注册中心,这里以Zookeeper为例来演示 1.Dubbo架构 Dubbo架构图(Dubbo官方提供)如下: 节

spring-boot整合dubbo:Spring-boot-dubbo-starter

为什么要写这个小工具 如果你用过Spring-boot来提供dubbo服务,相信使用中有很多"不爽"的地方.既然使用spring boot,那么能用注解的地方绝不用xml配置,这才是spring-boot-style.开个玩笑,真正意思是,spring-boot适合一些简单的.独立的服务,一个大的系统是不适合使用spring-boot来开发.相反,spring-boot适合那些简单服务的搭建. 网上大多数的方法还是使用xml配置,通过@Import注解来引入xml配置. 怎么使用 对于

详解Springboot整合Dubbo之代码集成和发布

本文介绍了Springboot整合Dubbo之代码集成和发布,分享给大家,具体如下: 1. boot-dubbo-api相关 打开boot-dubbo-api项目,正在src/main/java下创建一个包,并创建你需要dubbo暴露的接口TestService.java,并创建一个实体类用于测试User.java.如下图所示: 创建文件和包结构 User.java package com.boot.domain; import lombok.Data; import java.io.Seria

Springboot 整合 Dubbo/ZooKeeper 实现 SOA 案例解析

一.为啥整合 Dubbo 实现 SOA Dubbo 不单单只是高性能的 RPC 调用框架,更是 SOA 服务治理的一种方案. 核心: 远程通信,向本地调用一样调用远程方法. 集群容错 服务自动发现和注册,可平滑添加或者删除服务提供者. 我们常常使用 Springboot 暴露 HTTP 服务,并走 JSON 模式.但慢慢量大了,一种 SOA 的治理方案.这样可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 调用.下面我们详解下如何集成 Dubbo. 二.运行 spring

详解SpringBoot开发案例之整合Dubbo分布式服务

前言 在 SpringBoot 很火热的时候,阿里巴巴的分布式框架 Dubbo 不知是处于什么考虑,在停更N年之后终于进行维护了.在之前的微服务中,使用的是当当维护的版本 Dubbox,整合方式也是使用的 xml 配置方式. 改造前 之前在 SpringBoot 中使用 Dubbox是这样的.先简单记录下版本,Dubbox-2.8.4.zkclient-0.6.zookeeper-3.4.6. 项目中引入 spring-context-dubbo.xml 配置文件如下: <?xml versio

SpringBoot 整合 dubbo xml实现代码示例

昨天发布了注解方式,有人给我发了邮件希望能出一版本xml格式的,本来12点前能搞定的但是电脑稍微出了问题,导致idea 疯狂奔溃,搞了很久废话不多说了,有错误之处望大家指出发我邮箱. 用dubbo肯定是多模块化了 所以我们先创建一个聚合项目 这是项目结构 Dubbo_demo 的pom 这个主要用来聚合业务模块用不做任何业务处理 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

SpringBoot整合Dubbo zookeeper过程解析

这篇文章主要介绍了SpringBoot整合Dubbo zookeeper过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 docker pull zookeeper docker run --name zk01 -p 2181:2181 --restart always -d 2e30cac00aca 表明zookeeper已成功启动 Zookeeper和Dubbo• ZooKeeperZooKeeper 是一个分布式的,开放源码的分布式

Springboot整合Dubbo教程之项目创建和环境搭建

本文介绍了Springboot整合Dubbo教程之项目创建和环境搭建,分享给大家,具体如下: 1. 使用IDEA新建一个Maven项目 新建项目 选择Maven后,点击next下一步 选择项目类型 配置项目的Maven坐标 设置项目名称和保存位置 修改项目的pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM

SpringBoot2.0 整合 Dubbo框架实现RPC服务远程调用方法

一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互. 2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点. 3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用. 4)图中只包含 RPC

springboot快速整合Mybatis组件的方法(推荐)

Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 原有Spring优缺点分析 Spring的优点分析 Spring是Java企业版(Java Enterprise Edition,