我们在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();

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

最新文章

  1. codevs 2495 水叮当的舞步
  2. Java 集合的基本用法
  3. keytool的使用
  4. /proc/stat文件详解(翻译)
  5. ECshop 怎样修改商品详细页的“浏览次数”
  6. Fragment中调用Activity的UI
  7. EL表达式-例子
  8. nginx多域名的配置方法
  9. MySql配置参数很全的Mysql配置参数说明
  10. glance image cache
  11. ASP.NET - 页面传值 Request.QuerString[].ToString();
  12. 根据百度,gps坐标获取天气
  13. es6箭头函数 this 指向问题
  14. 深入浅出 JVM GC(4)常用 GC 参数介绍
  15. 设计模式之State(状态)(转)
  16. STL::array
  17. L237
  18. mysql 常用option
  19. Mac 通过活动监视器关闭卡死进程
  20. 用Python实现多站点运维监控

热门文章

  1. 分布式事务解决方案Seata
  2. STM32读取bq33100数据——硬件IIC
  3. MVVM 小雏形 knockout
  4. Beta冲刺——测试随笔
  5. Java实现 LeetCode 811 子域名访问计数 (暴力)
  6. Java实现 LeetCode 670 最大交换(暴力)
  7. Java实现 蓝桥杯 算法训练 最大最小公倍数
  8. Java实现 蓝桥杯VIP 算法训练 王后传说
  9. Java实现 LeetCode 224 基本计算器
  10. Java 是如何实现跨平台的?