Spring注解-IOC(二)

@Autowired:自动装配。spring利用依赖注入(DI),完成对IOC容器的各个组件的依赖关系赋值。

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

    /**
     * Declares whether the annotated dependency is required.
     * <p>Defaults to {@code true}.
     */
    boolean required() default true;

}

从@Autowired定义可以看到,此注解可以对类成员变量、方法、参数及构造函数进行标注,完成自动装配的工作。

@Component
@Data
public class Boss {

    @Autowired
    private Cat cat;
    private Car car;
    private Dept dept;
    private Woman woman;

    /** 
     * 标注在构造器上,Spring容器创建当前对象,就会调用方法完成赋值,
     * constructor does not have to be public.构造函数不必公开
     * 方法中的参数直接从IOC容器中获取,标注在其他位置也是一样,都是从IOC容器中拿
     */ 
    @Autowired
    public Boss(Car car){
        System.out.println("自动装配了cat");
        this.car = car;
    }
    //标注在参数上,IOC容器创建对象时不会自动调用,参数直接从IOC容器中拿来
    public void setDept(@Autowired Dept dept){
        System.out.println("自动装配了dept");
        this.dept = dept;
    }
    @Autowired      //标注在方法上,IOC容器创建对象时自动调用,参数直接从IOC容器中拿来
    public void setWoman(Woman woman){
        System.out.println("自动装配了woman");
        this.woman = woman;
    }
}

@Autowired注解的一些规则:
  1.默认使用类型去容器中找对应的组件,如果存在多个,则默认通过属性的名称查找对应的组件,如果找不到正确的组件,则会保存。
  2.required:默认为true,required=false,允许组件找不到,即使找不到组件,也不会报错。
  3.@Primary: 首选项,当存在多个相同类型的组件时,自动装配有@Primary标注的组件,覆盖默认查找规则。
  4.@Qualifier: 按指定名称装配,覆盖@Primary首选项规则。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容