Springboot在有参构造方法类中使用@Value注解取值
我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样
@Componentclass A { @Value('${user.value}') private String configValue; public void test() { System.out.println(configValue); }}
但有时我们需要这个类拥有一个有参的构造方法,比如
@Componentclass 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类:
@Configurationpublic class AConfig { @Bean(name='abc') DataOpration abcA() { return new A('abc'); }}
然后创建SpringUtil类
@Componentpublic 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. Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)2. 《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析3. java实现图形化界面计算器4. Intellij IDEA 2020.3 配置教程详解5. IntelliJ IDEA设置条件断点的方法步骤6. ASP.NET MVC获取多级类别组合下的产品7. Android 7.0 运行时权限弹窗问题的解决8. 5个HTML5的常用本地存储方式详解与介绍9. ASP.NET MVC解决上传图片脏数据的方法10. 原生js XMLhttprequest请求onreadystatechange执行两次的解决
