SpringBoot的静态方法中使用自动注入的属性 2020-12-02 16:25 语言:JAVA 框架:SpringBoot 在普通的类中,想要用配置文件的内容,只需要使用`@Value("${key}")`即可将配置文件中指定key的value值注入到变量中,但是前提是此变量不能是静态(static)的。静态的变量使用`@Value`后,项目运行起来,此变量会是null。 那如果我使用变量的方法是静态的呢?此时就必须要有一个静态变量。那么问题就变成了如何给静态变量赋值了。 ```yml xxx: proxy: ip: 10.10.10.10 port: 8080 ``` ```java @Slf4j @Component public class HttpClientUtil { @Value("${xxx.proxy.ip}") private String proxyUrl; @Value("${xxx.proxy.port}") private Integer port; private static String proxyUrlStatic; private static Integer portStatic; @PostConstruct public void init() { proxyUrlStatic = proxyUrl; portStatic = port; } public static String doPost(String url,String xmlParam,String charset) { // 静态方法中 可以使用 proxyUrlStatic 和 portStatic } } ``` - 1、类上面添加@Component注解 - 2、定义静态变量 和 非静态变量并使用`@Value`注入 - 3、 `@PostConstruct`注解标注一个无参、返回值为void、不抛出异常且非静态的方法。用来给静态变量赋值 - 4、静态方法中正常使用静态变量 tips: Spring中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法) --- 另:直接构造setter方法,在setter方法(setter方法不能是静态的)上添加`@Value`也可以 ```java @Slf4j @Component public class HttpClientUtil { private static String proxyUrlStatic; private static Integer portStatic; @Value("${xxx.proxy.ip}") public void setProxyUrlStatic(String proxyUrlStatic) { HttpClientUtil.proxyUrlStatic = proxyUrlStatic; } @Value("${xxx.proxy.port}") public void setPortStatic(Integer portStatic) { HttpClientUtil.portStatic = portStatic; } public static String doPost(String url,String xmlParam,String charset) { // 静态方法中 可以使用 proxyUrlStatic 和 portStatic } } ``` --END--
发表评论