龙目岛和Guice注射

Jin*_*Jin 1 dependency-injection guice lombok

我对lombok和guice注入不熟悉,我可以了解一般的概念,但是由于语法原因,我遇到了一些我不理解也无法搜索的代码。以下是代码,有人可以帮助我理解吗?

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

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject }))
public class SomeClass {
...
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

mha*_*ski 5

这将添加一个带有所有字段作为参数的构造函数,并带有@Inject注释和private修饰符,因此您的代码将扩展为:

import com.google.inject.Inject;

public class SomeClass {

    @Inject
    private SomeClass() {
    }
}
Run Code Online (Sandbox Code Playgroud)

假设类中没有字段。如果您有一些字段,那么它们将被添加到构造函数中,例如

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

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

会变成

import com.google.inject.Inject;

public class SomeClass {
    private String name        

    @Inject
    private SomeClass(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,根据以下文档,此方法无论如何在Guice中都不起作用,因为它需要一个非私有的构造函数:https : //github.com/google/guice/wiki/InjectionPoints

希望能帮助到你!

  • “请注意,无论如何这在Guice中都不起作用,因为它需要一个非私有的构造函数。”这仅在构造函数没有`@ Inject`注释时才成立。有了注释,Guice可以很好地处理它,除非AOP不起作用。 (3认同)