1.不能作用于静态变量(static);
2.不能作用于常量(final);
3.不能在非注册的类中使用(类需要被注册在spring上下文中,如用@Service,@RestController,@Component等);
4.使用这个类时,只能通过依赖注入的方式,用new的方式是不会自动注入这些配置的。
前提是将Controller可以扫描到
@Controller
public class Controller {
@Value("${url}")
String url;
}
上面的代码有什么问题吗?有! 这个时候url并不是上面被@Value注入的值,而是null。这是为什么呢?
首先我们看一下Spring在初始化Bean的过程:

解释一下: 1. 读取定义 2. Bean Factory Post Processing 3. 实例化 4. 属性注入 5. Bean Post Processing
这个问题的原因就很明显了。@Value注入是在第四步,而初始化变量是在第三部,这个使用变量还没有被注入,自然为null了。
解决的方法也很简单,把需要初始化的变量放到第四步去实例化就可以了。下面给出一个解决方法:
@Controller
public class Controller{
private String url;
@Autowired
public void setUrl(@Value("${url}") String url) {
this.url = url
}
}
本文解析了Spring中@Value注解在Controller初始化静态变量时的困惑,阐述了原因并提供了解决方案,强调了依赖注入的重要性。
1852

被折叠的 条评论
为什么被折叠?



