@Resource,@Autowired和@Qualifier的區別

1.註解源碼

@Autowired: 註解中僅僅有是否必需元素java

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

@Qualifer:僅僅有一個value元素編程

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {
    String value() default "";
}

@Resource:能夠指定類型也能夠指定名稱app

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
    String name() default ""; //名稱

    String lookup() default ""; 

    Class<?> type() default java.lang.Object.class; //類型

    enum AuthenticationType {
            CONTAINER,
            APPLICATION
    }

    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;

    boolean shareable() default true;

    String mappedName() default "";

    String description() default "";
}

2.業務代碼

serviceui

@Service
public class RemarkServiceImpl implements IRemarkService {
}

@Service的使用有兩種狀況:code

A.直接使用@Service進行註解:可經過IRemarkServic類型和RemarkServiceImpl類型進行注入,也能夠經過remarkServiceImpl名稱注入。
B.指定名稱@Service("remarkService"),這是可經過注入IremarkService和RemarkServiceImpl類型,也可經過remarkService名稱進行注入,不能使用remarkServiceImpl名稱進行注入了。接口

雖然@Service會默認生成對應名稱的實例,也能夠推薦加上默認的名稱。ip

controller開發

@RestController
@RequestMapping("/remark")
public class RemarkController {

    @Autowired
    @Qualifier("remarkService")
    private RemarkServiceImpl remarkService;
}

@Autowired:首先按照類型進行注入,若是注入的類型是有多個實現而且注入到容器的類型,而後會按照變量名稱進行注入。
@Qualifier("remarkService"):此註解同@Autowired一塊使用,注入的類型匹配而且名稱也匹配,注入的實例的類型但是要注入類型的子類或自己類型。rem

@Resource:該註解能夠指定註解的名稱或者類型,若是僅僅指定類型,使用同@Autowired;若是指定了名稱,那麼就必須按照名稱進行注入。get

3.具體使用

在開發過程當中,注入的類型最好是基類,也體現了面向接口編程,也就是說變量類型使用基類類型,變量名使用基類首字母小寫的形式。若是一個基類僅僅有一個實現而且注入到容器中,那麼使用@Autowired進行註解;若是一個基類有多個實現,而且注入到容器,那麼使用@Resource註解指定要注入的名稱。

相關文章
相關標籤/搜索