§@Config

在前面的章节中,我们使用 @Inject 注入 IoC 容器中管理的对象。在这个章节中,我们将介绍另外一种配置文件属性的注入方式。

假设我们有这样一个配置文件:

app.properties

app.encoding = utf-8
app.debug = true
app.users = admin, test

AppConfig.java

@IocBean
public class AppConfig {

    @Config("app.encoding")
    private String encoding;

    @Config(value="app.debug", defaultValue="false")
    private boolean debug;

    @Config("app.users")
    private List<String> users;

    ...
}

然后这样下面的代码将自动将 app.properties 中的属性注入到 AppConfig 类中。

MutableIoc ioc = new MutableIoc();
ioc.load(new IocPropertiesLoader("classpath:app.properties");
ioc.addBean(AppConfig.class);

AppConfig config = ioc.getBean(AppConfig.class);

心动了吗?我们的 AppConfig 竟然还能直接注入 app.properties 配置文件中配置的属性。

并且注入的时候,还会自动进行类型转换,以匹配目标类型。

@Inject 类似,@Config 可以被用在字段注入和参数注入。

再来一个构造函数参数注入的例子:

@IocBean
public class Hello {
    private final Foo foo;
    private final String encoding;

    @Inject
    public Hello(
        @Inject("foo") Foo foo,
        @Config("app.encoding") String encoding
    ) {
        this.foo = foo;
        this.encoding = encoding;
    }
}

怎么样?有了 @Config,我们的注入更方便了。