@Qualifier、@Named、Provider<T>源码翻译

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.ANNOTATION_TYPE;

/**
 * 标识@Qualifier注解,任何人都能够定义新的限定符
 * 一个qualifier注解应该满足如下条件:
 *     a. 定义的注解类有@Qualifier,@Retention(RUNTIME)和@Documented
 *     b. 可以有属性
 *     c. 可以是公共API的一部分
 *     d. 可以用@Target注解限定使用范围
 * @author TCM
 * @create 2017年10月19日上午10:31:48
 * @see javax.inject.Named @Named
 */
@Target(ANNOTATION_TYPE)
@Retention(RUNTIME)
@Documented
public @interface Qualifier {}

package javax.inject;

import java.lang.annotation.Retention;
import java.lang.annotation.Documented;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 基于{@linkplain Qualifier qualifier},目的:可以注解有值的bean名(定义bean名称)
 * public class Car {
 *    @Inject @Named("driver") Seat driverSeat;
 *    @Inject @Named("passenger") Seat passengerSeat;
 *    ...
 * }
 * 注意:@Named可以有值,如果没有值生成的Bean名称默认和类名相同。
 * @author TCM
 * @create 2017年10月19日下午3:33:08
 */
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface Named {

    /** 注入的bean名*/
    String value() default "";
}

package javax.inject;
/**
 * 目的:提供实例
 * 通过注入实现获取T实例(泛型)
 * 获取注入实例T,可以使用Provider<T>,或注解注入T,两者有什么区别:
 *    a. Provider<T>可以获取多个实例
 *    b. 实例可以延迟或可选的检索
 *    c. 阻断循环依赖
 *    d. 小范围内查看实例
 * 例如:
 * class Car {
 *    @Inject 
 *    Car(Provider<Seat> seatProvider) {
 *      Seat driver = seatProvider.get();
 *      Seat passenger = seatProvider.get();
 *      ...
 *    }
 * }
 * @author TCM
 * @create 2017年10月19日下午3:38:26
 */
public interface Provider<T> {

    /**
     * 提供构造器,注入一个实例T
     * Provides a fully-constructed and injected instance of {@code T}.
     * @throws RuntimeException 
     */
    T get();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值