https://jakarta.ee/specifications/platform/9/apidocs/jakarta/inject/inject
- jakarta.inject.Inject注解用来声明可注入的构造器、方法、和属性。可以应用到静态的成员、或者实例成员。一个可注入的成员可以具有任意的访问修饰符(private, package-private, protected, public)。构造器首先被注入,紧接着是属性,然后是方法。父类中的属性和方法比子类中的属性和方法先注入。在同一个类中,注入的多个属性的顺序没有明确,注入的多个方法的顺序也没有明确。
- 可注入的构造器用@Inject注解,并且接受一个或多个作为参数的依赖。在一个类中,@Inject至多只能用到一个构造器上。语法:
- 如果一个类中除了public、并且不带参数的构造器外,没有其它的构造器,那么@Inject是可选的,这允许注入器调用默认的构造器:
- 可注入的属性:1)以@Inject注解。2)不是final的。3)可以具有任何其它有效的名字。语法:
- 可注入的方法:1)以@Inject注解。2)不是abstract的。3)没有声明任何它本身的类型参数。4)可以返回一个结果。5)可以具有任何其它有效的名字。6)可以接受0个或多个作为依赖的参数。语法:
示例:
public class Car {
// Injectable constructor
@Inject public Car(Engine engine) { ... }
// Injectable field
@Inject private Provider<Seat> seatProvider;
// Injectable package-private method
@Inject void install(Windshield windshield, Trunk trunk) { ... }
}
- 如果一个被@Inject的方法覆盖了另外一个被@Inject的方法,那么针对每个实例的每个注入请求,方法只会被注入一次。
- 尽管可注入的成员可以具有任何的访问修饰符(包含private),但平台或者注入器的限制(例如安全限制、或者少反射的支持)可能不会注入non-public成员。