有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有标准注释的java自定义注入

在不定义自定义注释的情况下,是否可以使用基于注入点计算的构造函数/工厂参数执行自定义注入

给定一个代码:

class Foo {
  public Foo() {}
  public Foo(java.lang.reflect.Field field) {}
}

class Bar {
  @javax.inject.Inject Foo foo;
}

如何配置guice以使用Foo传递目标字段)的第二个构造函数而不修改Bar

我知道guice可以定制java注入。util。登录中。带有标准@Inject的记录器,但它似乎是硬编码的,并且使用内部api


共 (2) 个答案

  1. # 1 楼答案

    如果只想使用特定构造函数,可以使用constructor bindings

    bind(Foo.class).toConstructor(Foo.class.getConstructor(java.lang.reflect.Field.class));
    

    如果需要更复杂的内容,则必须使用custom injections

  2. # 2 楼答案

    您可以使用注入提供者来实现这一点。见https://code.google.com/p/google-guice/wiki/ProviderBindingshttps://code.google.com/p/google-guice/wiki/ProvidesMethods。您只需告诉Guice在绑定对象时如何实例化它

    例如,在我的一个项目中,我尝试了以下方法:

    public static class CalendarServiceProvider implements Provider<CalendarService> {
        @Inject
        GAppsOAuth oauth;
        private GCalendarService service;
    
        @Override
        public CalendarService get() {
            if (service == null) {
                service = new GCalendarService(oauth);
            }
            return service;
        }
    }
    

    我不知道这是否是你想要的,但我希望它会有帮助