Ломбок и хитрый укол
Я новичок в инъекциях 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
файл.