Ломбок и хитрый укол

Я новичок в инъекциях lombok и guice, могу понять общую концепцию, но натолкнулся на некоторый код, который не понимаю и не могу найти из-за синтаксиса. Ниже приведен код, может кто-нибудь помочь мне понять это?

import com.google.inject.Inject;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject }))
public class SomeClass {
...
}

Спасибо!

2 ответа

Это собирается добавить конструктор со всеми полями в качестве параметров, с @Inject аннотация и private модификатор, поэтому ваш код будет расширен до:

import com.google.inject.Inject;

public class SomeClass {

    @Inject
    private SomeClass() {
    }
}

Это при условии, что в классе нет полей. Если у вас есть несколько полей, то они будут добавлены в конструктор, например

import com.google.inject.Inject;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject }))
public class SomeClass {
    private String name;
}

Станет

import com.google.inject.Inject;

public class SomeClass {
    private String name        

    @Inject
    private SomeClass(String name) {
        this.name = name;
    }
}

Обратите внимание, что в Guice это все равно не будет работать, так как для этого требуется конструктор, который не является частным, согласно этой документации: https://github.com/google/guice/wiki/InjectionPoints.

Надеюсь, поможет!

Также убедитесь, что Ломбок сохраняет все@Namedаннотации, которые вы добавили!

В противном случае приведенный ниже код, например, не сможет внедрить:

      @AllArgsConstructor(access = AccessLevel.PACKAGE, onConstructor = @__({@Inject}))
public class SomeClass {
    @Named("example")
    private String exampleString;
}

public class ExampleModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(String.class)
          .annotatedWith(Names.named("example"))
          .toInstance("Hello, world!");
    }
}

Смотрите этот ответ: Ломбок сохраняет поля . Вы хотите добавить

      lombok.copyableAnnotations += com.google.inject.name.Named

на вашlombok.configфайл.

Другие вопросы по тегам