我可以在Spring条件中访问Spring定义的属性吗?

时间:2015-09-22 18:36:36

标签: java spring spring-boot properties-file

希望我的问题是相当不言自明的 - 我将用一些示例代码来说明它。

@Component
@PropertySource("classpath:/my-properties.properties")
public class SomeProperties {
    @Autowired
    Environment env;

    // private methods

    public boolean isEnabled(Foo foo) {
        // call private methods, call env.getProperty, return value
    }
}

@Component // it makes no difference whether it's there or not
public class MyCondition implements Condition {
    @Autowired // doesn't make a difference
    private SomeProperties someProperties;

    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        // ...
        boolean b = someProperties.isEnabled(foo); // get NPE on this line
        // ...return
    }
}

@Component
@Conditional(MyCondition.class)
public class Bar {
    // stuff
}

(这里我使用Spring Boot来配置Spring。虽然我怀疑它有什么不同 - 因为@Component bean在引导后绝对是可访问的,所以它似乎不是一个问题的方式Spring已配置。)

问题是我在指定的行上收到了NullPointerException,因为somePropertiesnull。这可能是因为在运行条件时,Spring bootstrap的自动装配/实例化阶段还没有发生。

有没有办法以这种方式访问​​Spring Properties - 比如强制Spring在正常情况下加载bean?或者是使用标准Java / Apache Commons属性代码而不是Spring的唯一方法?

0 个答案:

没有答案