spring 为什么@Bean注解的autowire属性默认值为Autowire.NO时@Autowired仍然有效?

fnvucqvd  于 2023-02-03  发布在  Spring
关注(0)|答案(1)|浏览(172)

下面是@Bean源代码:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Bean {
        @AliasFor("name")
        String[] value() default {};
    
        @AliasFor("value")
        String[] name() default {};
    
        Autowire autowire() default Autowire.NO;
    
        String initMethod() default "";
    
        String destroyMethod() default "(inferred)";
    }

我发现autowire的默认值是Autowire.NO,但是当我使用这个bean和@Autowired时,它仍然工作,这是默认行为还是某种约定?

xfyts7mz

xfyts7mz1#

来自文档:
public abstract org. springframework. beans. factory. annotation. autowire autowire依赖项是通过基于约定的自动装配按名称还是按类型注入的?请注意,这种自动装配模式只是基于约定的bean属性设置器方法的外部驱动的自动装配,类似于XML bean定义。
默认模式允许注解驱动的自动装配。"no"表示仅外部驱动的自动装配,不影响Bean类本身通过注解表达的任何自动装配要求。另请参见:
自动布线. BY_NAME、自动布线. BY_TYPE默认值:org.springframework.beans.factory.annotation.Autowire.NO
换句话说,该属性与如何将bean注入到其他bean无关,而是与如何隐式自动连接bean自身的属性有关。
默认情况下(Autowire.NO)意味着Spring不会尝试调用setter方法,除非显式地使用@Autowired进行注解
This was also answered here

相关问题