@Autowired
看这个注解的意思就很明白,它会自动装配。
标注字段:如果一个字段被@Autowired标注,这表示这个字段通过自动装配的方式注入依赖。标注字段时,可以不用定义setter方法。(XML配置时,使用setter依赖注入必须定义setter方法)
匹配被依赖bean的方式:首先,通过byType的方式,在容器中找出类型匹配的bean;如果找到的bean不唯一,则在这些类型匹配的bean中通过byName的方式再次进行匹配。
除了标注字段,还可以用来标注setter方法
通过指定id/name进行装配:@Qualifire、@Resource
在XML中,如果不使用byType和byName的自动装配,就需要通过id来指定装配哪个bean。
现在,也想要通过注解来指定bean的id/name进行注入。有两种方式:
与@Autowired一同使用的@Qualifire
例:
public class MovieRecommender {
@Autowired
@Qualifier("main")
private MovieCatalog movieCatalog;
// ...
}
在容器中,存在一个id/name位main的bean(可能时通过注解定义的,也可能时XML定义的),把这个名位main的bean注入到movieCatalog属性中。
@Resource指定id注入
注:@Resource这个注解不是Spring框架中定义的注解,这个注解定义在javax.annotation.Resource,所以,要使用这个注解,要先引入依赖
<!-- https://mvnrepository.com/artifact/javax.annotation/jsr250-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
使用@Resource可以指定id进行注入:
public class MovieRecommender {
@Resource("customerPreferenceDao")
private CustomerPreferenceDao customerPreferenceDao;
@Resource("context")
private ApplicationContext context;
public MovieRecommender() {
}
// ...
}
简单类型、String注入@Value
上面介绍的都是对于引用类型的注入。通过@Value注解,可以对简单类型进行注入。
@Component
public class TestBean {
@Value("bean's info")
String info;
}