前言
在前面的文章中,我们使用@Bean
(或者@Component
)注解将Bean注册到了Spring容器;我们创建这些Bean的目的,最终还是为了使用,@Autowired
注解可以将bean自动注入到类的属性中。@Autowired
注解可以直接标注在属性上,也可以标注在构造器,方法,甚至是传入参数上,其实质都是调用了setter方法注入。
源码
Source Code:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
复制代码
当自动注入的Bean不存在时,Spring会报错;如果希望Bean存在时才注入,可以使用
@Autowired(required=false)
。
使用
标注在属性上:
...
@Autowired
private MyBean myBean;
...
复制代码
标注在方法上:
...
@Autowired
public void setMyBean(MyBean myBean) {
this.myBean = myBean;
}
...
复制代码
标注在构造函数上:
...
@Autowired
public MyClass(MyBean myBean) {
this.myBean = myBean;
}
...
复制代码
标注在方法参数上:
...
public void setMyBean(@Autowired MyBean myBean) {
this.myBean = myBean;
}
...
复制代码
补充说明
@Autowired
和@Resource
注解都是作为bean对象注入时使用的,@Autowired
是Spring提供的注解,而@Resource
是J2EE本身提供的。@Autowired
首先根据类型去寻找注入的对象,如果有多个再根据名字匹配。- 当名字也无法区分时可以通过
@Qulifier
显式指定,如:
@Autowired
@Qualifier("userServiceImpl1")
private UserService userService;
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END