注意
-
不能作用于静态变量(static);
-
不能作用于常量(final);
-
不能在非注册的类中使用(类需要被注册在spring上下文中,如用
@Service,@RestController,@Component等);
-
使用这个类时,只能通过依赖注入的方式,用new的方式是不会自动注入这些配置的。
示例
- 配置文件
qiniu:
ACCESSKEY: N0Jk2mJqhLzI_6qkWuwnwxtvqDoKL7czi
SECRETKEY: yn8TiloDHLgSEYF8hgy4PbkYEeQcgncWZt
BUCKETNAME: lhw-blog-system
- 在某个定义类使用
- 配置类
package com.lhw.blog.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QiniuConfig {
@Value("${qiniu.ACCESSKEY}")
public String accessKey;
@Value("${qiniu.SECRETKEY}")
public String secretKey;
@Value("${qiniu.BUCKETNAME}")
public String bucket;
}
- 定义类
@Component
public class QiniuUtils {
@Autowired
private QiniuConfig qiniuConfig;
// 其他操作
}
如上案例, 如果我要用 new QiniuUtils()
的方式定义一个对象,并调用相关方法,那么注入的qiniuConfig
对象是 null
。
正确的方式是 通过注解的方式调用QiniuUtils工具类
如下:
- Controller层
@RestController
@RequestMapping("/api/img")
public class ImageController {
@Autowired
private QiniuUtils qiniuUtils;
}
总结
除了上面提到的四点,记住,只要用到@Value的类,只能用注解的方式生成实例。