在使用SpringBoot开发时,我们如果要用到自定义的值,我们通常做法是在 Yml
配置文件配置相应的属性,然后在类中配置相应的配置文件获得属性值。例如我们在 Yml
中有下面一个属性值
test: value: secondAgent
那么我们可以在类中做如下配置就可以从中取出值
@Component public class GetValue { @Value("${test.value}") public String testValue; }
在使用的时候直接通过自动注入此类就能获取到属性值
@Autowired private GetValue getValue; @Override public void run(String... args) throws Exception { System.out.println(getValue.testValue); }
但是在有一次开发中,在项目启动后怎么获取值都获取不到。在追溯最近一次修改文件情况下,发现了加了事务的管理。事务管理加到了整个service文件夹中。而将此配置文件移出service文件夹以后值又能获取到了。
- service - common - 配置类所在的位置
配置类大概如下
@Data @Component public class GetValue { @Value("${test.value}") public String testValue; }
注意此处的编码不规范的地方,属性值使用了public修饰,而在使用的时候也没有通过get()方法来获取值
在使用事务的时候会在此类的基础上生成一个代理类,而代理类属性值是传递不过来的。我们可以看到被代理的配置类如下
而如果我们此时直接通过自动注入获取到的是被代理的类,而调用代理类只有调用方法级别才能够到达原类,如果直接获取属性值是获取不到的。所以此时如果我们直接调用 getValue.testValue
获得值只能是null。
get()
Previous
Java8——异步编程