一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2020-06-28 编辑:袖梨 来源:一聚教程网

本篇文章小编给大家分享一下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();

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

热门栏目