@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注解指定要注入的名称。

相关文章
相关标签/搜索