下面是@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时,它仍然工作,这是默认行为还是某种约定?
1条答案
按热度按时间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