@Inject源码翻译

来源:互联网 发布:神仙道心动网络 编辑:程序博客网 时间:2024/06/07 09:28
package javax.inject;import java.lang.annotation.Target;import java.lang.annotation.Retention;import java.lang.annotation.Documented;import static java.lang.annotation.RetentionPolicy.RUNTIME;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.ElementType.CONSTRUCTOR;import static java.lang.annotation.ElementType.FIELD;/** * {@code @Inject}支持构造器、方法、字段,也可以是静态实例成员。一个可注入的成员有着以下修饰符:private, package-private,  * protected, public。注入的顺序:构造器 --> 字段 --> 方法。字段和方法上,超类的注入先于子类的注入。在相同的类中, * 字段之间和方法之间注入的顺序不作要求。 *  * {@code @Inject}可以注解无参或有参构造器,每个类最多只能注解一个构造器。若果注入public且无参构造器而没有其他构造器, * 则注入的是默认构造器。字段不能为final修饰;方法不能是abstract * 例如: * 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) { ... } *    } * * {@code @Inject}被注解的方法覆写了已经被注解的方法,则注入是最终的实例;没有注解的方法覆写一个被注解的方法,则不能注入 *  * 带有任何访问修饰符(包括private)的成员都可以注入。 * 非public成员,在平台或注射器的局限性(像安全限制或缺少反射支持)可能阻止注入 *  * 1.Qualifiers:限定符 * 2.Injectable Values:可注入的值 * 3.Circular Dependencies:循环依赖(例如:A依赖B,B依赖A) *      解决办法:a.平移:比如A和B互相依赖,那么可以将B依赖A的那部分代码,移动到B中 *             b.下移,比如A和B互相依赖,同时它们都依赖C,那么可以将B和A相互依赖的那部分代码,移动到C中 *      参考资料:http://hck.iteye.com/blog/1728329 * @author TCM * @create 2017年10月18日下午3:16:55 * @see javax.inject.Qualifier @Qualifier * @see javax.inject.Provider */@Target({ METHOD, CONSTRUCTOR, FIELD })@Retention(RUNTIME)@Documentedpublic @interface Inject {}
原创粉丝点击